| 245 | | gs_handle( hash_list, ngroups, gstid ) | | 246 | | GROUP_LIST_PTR hash_list; | | 247 | | int *ngroups, *gstid; | | 248 | | { | | 249 | | int len, msgtag, tid, gid, cc, ftid, inst, i, size, ntids, listsize; | | 250 | | int cnt, hosttid, nhosts, nmem_onhost, pcoord; | | 251 | | int *nmem_onhostv = (int *) NULL, *pcoordv = (int *) NULL;
| | 252 | | int mxupklen = 0; | | 253 | | GROUP_STRUCT_PTR group; | | 254 | | char *groupname = (char *) NULL;
| | 255 | | int *tidlist = (int *) NULL;
| | 256 | | int maxntids = 0, info; | | 257 | | int gstate; | | 258 | | | | 259 | | while ( 1 ) | | 260 | | { | | 261 | | if ( (cc = pvm_recv( -1, -1 )) < 0 ) | | 262 | | { | | 263 | | pvm_perror( "gs_handle(recv)" ); | | 264 | | return( cc ); | | 265 | | } | | 266 | | | | 267 | | if ( (cc = pvm_bufinfo( pvm_getrbuf(), &len, &msgtag, &tid )) | | 268 | | < 0 ) | | 269 | | { | | 270 | | pvm_perror("gs_handle(bufinfo)"); | | 271 | | return( cc ); | | 272 | | } | | 273 | | | | 274 | | | | 275 | | | | 276 | | REALLOCSTRING( len, mxupklen , groupname, "gs_handle(entry)" );
| | 277 | | | | 278 | | switch( msgtag ) | | 279 | | { | | 280 | | case (DIE):
| | 281 | | gs_pstate( "pvmgs", hash_list, ngroups ); | | 282 | | return( PvmOk );
| | 283 | | | | 284 | | case (JOIN):
| | 285 | | pvm_upkstr( groupname ); | | 286 | | gid = gs_join( groupname, tid, hash_list, ngroups ); | | 287 | | | | 288 | | if ( pvm_notify( PvmTaskExit, DEADTID, 1, &tid ) < 0 )
| | 289 | | pvm_perror( "pvmgs-join" ); | | 290 | | SENDINTRESULT( gid, tid, msgtag, "gs_handle(join)" );
| | 291 | | break; | | 292 | | | | 293 | | case (LEAVE):
| | 294 | | pvm_upkstr( groupname ); | | 295 | | cc = gs_leave( groupname, tid, hash_list, ngroups ); | | 296 | | SENDINTRESULT( cc, tid, msgtag, "gs_handle(leave)" );
| | 297 | | break; | | 298 | | | | 299 | | case (DEADTID):
| | 300 | | pvm_upkint( &tid, 1, 1 ); | | 301 | | if ( tid < 0 ) | | 302 | | { | | 303 | | fprintf( stderr, "pvmgs: weird dead tid x%x %d\n", | | 304 | | tid, tid ); | | 305 | | break; | | 306 | | } | | 307 | | cc = gs_deadtid( tid, hash_list, ngroups ); | | 308 | | break; | | 309 | | | | 310 | | case (BARRIER):
| | 311 | | case (BARRIERV):
| | 312 | | pvm_upkstr( groupname ); | | 313 | | pvm_upkint( &cnt, 1, 1 ); | | 314 | | cc = gs_barrier( groupname, msgtag, | | 315 | | cnt, tid, hash_list, ngroups ); | | 316 | | | | 317 | | if ( cc < 0 ) | | 318 | | SENDINTRESULT( cc, tid, msgtag,
| | 319 | | "gs_handle(barrier)" ); | | 320 | | break; | | 321 | | | | 322 | | case (BCAST):
| | 323 | | case (TIDLIST):
| | 324 | | pvm_upkstr( groupname ); | | 325 | | cc = gs_tidlist( groupname, ((msgtag == BCAST) ? 0 : 1),
| | 326 | | hash_list, ngroups, &gstate ); | | 327 | | if ( cc ) | | 328 | | SENDINTRESULT( cc, tid, msgtag, "gs_handle(bcast)" )
| | 329 | | else | | 330 | | { | | 331 | | PK_STATE( tid, gstate, groupname, hash_list,
| /u1/paul/SATE/2010/c/pvm/pvm3/pvmgs/pvmgs_mac.h | | 61 | #define PK_STATE( tid, state, name, hash_list, ngroups, caller ) \ | | 62 | { if ( pvm_pkint( &(state), 1, 1 ) < 0 ) \ | | 63 | pvm_perror( caller ); \ | | 64 | if ( state == STATIC ) \ | | 65 | if ( gs_newstaticcache( tid, name, hash_list, ngroups, \ | | 66 | caller ) == PvmgsNotCached ) \ | | 67 | gs_pkstaticinfo( gs_group( name, hash_list, ngroups, \ | | 68 | NOCREATE ) ); \ | | 69 | } |
| | 332 | | ngroups, "gs_handle(bcast)" ); | | 333 | | SENDRESULT( tid, msgtag, "gs_handle(bcast)" );
| | 334 | | } | | 335 | | break; | | 336 | | | | 337 | | case (GSIZE):
| | 338 | | pvm_upkstr( groupname ); | | 339 | | size = gs_gsize( groupname, hash_list, ngroups, | | 340 | | &gstate ); | | 341 | | PK_IRESULT( size, "gs_handle(gsize)" );
| | 342 | | PK_STATE( tid, gstate, groupname, hash_list, ngroups,
| /u1/paul/SATE/2010/c/pvm/pvm3/pvmgs/pvmgs_mac.h | | 61 | #define PK_STATE( tid, state, name, hash_list, ngroups, caller ) \ | | 62 | { if ( pvm_pkint( &(state), 1, 1 ) < 0 ) \ | | 63 | pvm_perror( caller ); \ | | 64 | if ( state == STATIC ) \ | | 65 | if ( gs_newstaticcache( tid, name, hash_list, ngroups, \ | | 66 | caller ) == PvmgsNotCached ) \ | | 67 | gs_pkstaticinfo( gs_group( name, hash_list, ngroups, \ | | 68 | NOCREATE ) ); \ | | 69 | } |
| | 343 | | "gs_handle(gsize)" ); | | 344 | | SENDRESULT( tid, msgtag, "gs_handle(gsize)" );
| | 345 | | break; | | 346 | | | | 347 | | case (GETINST):
| | 348 | | pvm_upkstr( groupname ); | | 349 | | pvm_upkint( &ftid, 1, 1 ); | | 350 | | inst = gs_getinst( groupname, ftid, hash_list, ngroups, | | 351 | | &gstate ); | | 352 | | PK_IRESULT( inst, "gs_handle(getinst)" );
| | 353 | | PK_STATE( tid, gstate, groupname, hash_list, ngroups,
| /u1/paul/SATE/2010/c/pvm/pvm3/pvmgs/pvmgs_mac.h | | 61 | #define PK_STATE( tid, state, name, hash_list, ngroups, caller ) \ | | 62 | { if ( pvm_pkint( &(state), 1, 1 ) < 0 ) \ | | 63 | pvm_perror( caller ); \ | | 64 | if ( state == STATIC ) \ | | 65 | if ( gs_newstaticcache( tid, name, hash_list, ngroups, \ | | 66 | caller ) == PvmgsNotCached ) \ | | 67 | gs_pkstaticinfo( gs_group( name, hash_list, ngroups, \ | | 68 | NOCREATE ) ); \ | | 69 | } |
| | 354 | | "gs_handle(getinst)" ); | | 355 | | SENDRESULT( tid, msgtag, "gs_handle(getinst)" );
| | 356 | | break; | | 357 | | | | 358 | | case (GETTID):
| | 359 | | pvm_upkstr( groupname ); | | 360 | | pvm_upkint( &inst, 1, 1 ); | | 361 | | ftid = gs_gettid( groupname, inst, hash_list, ngroups, | | 362 | | &gstate ); | | 363 | | PK_IRESULT( ftid, "gs_handle(gettid)" );
| | 364 | | PK_STATE( tid, gstate, groupname, hash_list, ngroups,
| /u1/paul/SATE/2010/c/pvm/pvm3/pvmgs/pvmgs_mac.h | | 61 | #define PK_STATE( tid, state, name, hash_list, ngroups, caller ) \ | | 62 | { if ( pvm_pkint( &(state), 1, 1 ) < 0 ) \ | | 63 | pvm_perror( caller ); \ | | 64 | if ( state == STATIC ) \ | | 65 | if ( gs_newstaticcache( tid, name, hash_list, ngroups, \ | | 66 | caller ) == PvmgsNotCached ) \ | | 67 | gs_pkstaticinfo( gs_group( name, hash_list, ngroups, \ | | 68 | NOCREATE ) ); \ | | 69 | } |
| | 365 | | "gs_handle(gettid)" ); | | 366 | | SENDRESULT( tid, msgtag, "gs_handle(gettid)" );
| | 367 | | break; | | 368 | | | | 369 | | case (STATICGROUP):
| | 370 | | pvm_upkstr( groupname ); | | 371 | | pvm_upkint( &size, 1, 1 ); | | 372 | | info = gs_static( groupname, size, tid, hash_list, | | 373 | | ngroups ); | | 374 | | if ( info < 0 ) | | 375 | | SENDINTRESULT( info, tid, msgtag,
| | 376 | | "gs_handle(static)" ); | | 377 | | | | 378 | | break; | | 379 | | | | 380 | | case DUMP:
| | 381 | | gs_pstate( "DUMP", hash_list, ngroups ); | | 382 | | break; | | 383 | | | | 384 | | case GSLS:
| | 385 | | gs_ls( hash_list, ngroups ); | | 386 | | pvm_send( tid, msgtag ); | | 387 | | break; | | 388 | | | | 389 | | case HOSTCHAR:
| | 390 | | pvm_upkstr( groupname ); | | 391 | | pvm_upkint( &hosttid, 1, 1 ); | | 392 | | gs_host_char( groupname, hash_list, ngroups, hosttid, | | 393 | | &pcoord, &nmem_onhost, &nhosts, &gstate ); | | 394 | | PK_IRESULT( nhosts, "gs_handle(hostchar)" );
| | 395 | | pvm_pkint( &nmem_onhost, 1, 1 ); | | 396 | | pvm_pkint( &pcoord, 1, 1 ); | | 397 | | PK_STATE( tid, gstate, groupname, hash_list, ngroups,
| /u1/paul/SATE/2010/c/pvm/pvm3/pvmgs/pvmgs_mac.h | | 61 | #define PK_STATE( tid, state, name, hash_list, ngroups, caller ) \ | | 62 | { if ( pvm_pkint( &(state), 1, 1 ) < 0 ) \ | | 63 | pvm_perror( caller ); \ | | 64 | if ( state == STATIC ) \ | | 65 | if ( gs_newstaticcache( tid, name, hash_list, ngroups, \ | | 66 | caller ) == PvmgsNotCached ) \ | | 67 | gs_pkstaticinfo( gs_group( name, hash_list, ngroups, \ | | 68 | NOCREATE ) ); \ | | 69 | } |
| | 398 | | "gs_handle(hostchar)" ); | | 399 | | SENDRESULT( tid, msgtag, "gs_handle(hostchar)" );
| | 400 | | break; | | 401 | | | | 402 | | case HOSTCHARV:
| | 403 | | pvm_upkstr( groupname ); | | 404 | | gs_host_all( groupname, hash_list, ngroups, &pcoordv, | | 405 | | &nmem_onhostv, &nhosts, &gstate ); | | 406 | | PK_IRESULT( nhosts, "gs_handle(hostchar)" );
| | 407 | | pvm_pkint( nmem_onhostv, nhosts, 1 ); | | 408 | | pvm_pkint( pcoordv, nhosts, 1 ); | | 409 | | PK_STATE( tid, gstate, groupname, hash_list, ngroups,
| /u1/paul/SATE/2010/c/pvm/pvm3/pvmgs/pvmgs_mac.h | | 61 | #define PK_STATE( tid, state, name, hash_list, ngroups, caller ) \ | | 62 | { if ( pvm_pkint( &(state), 1, 1 ) < 0 ) \ | | 63 | pvm_perror( caller ); \ | | 64 | if ( state == STATIC ) \ | | 65 | if ( gs_newstaticcache( tid, name, hash_list, ngroups, \ | | 66 | caller ) == PvmgsNotCached ) \ | | 67 | gs_pkstaticinfo( gs_group( name, hash_list, ngroups, \ | | 68 | NOCREATE ) ); \ | | 69 | } |
| | 410 | | "gs_handle(hostchar)" ); | | 411 | | SENDRESULT( tid, msgtag, "gs_handle(hostchar)" );
| | 412 | | break; | | 413 | | | | 414 | | default: | | 415 | | break; | | 416 | | } | | 417 | | } | | 418 | | } |
|