| | 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 | | | | true | 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, |
| | 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; |
|