value Pvm_bcast(value groupname, value msgtag) { int err = pvm_bcast(String_val(groupname), Int_val(msgtag)); if (err < 0) TreatError(err); return; }
void broadcastOpN(OpCode op, char *group, int n, StgPtr args) { long arg; //traceSendOp(op, task, 0, 0); pvm_initsend(PvmDataRaw); arg = (long) n; PutArgN(0, arg); PutArgs(args, n); pvm_bcast(group, op); }
void bcast_request_msg(struct state_info info) { int tag = MSG_REQUEST; *info.local_clock += 1; pvm_initsend(PvmDataDefault); pvm_pkint(&tag, 1, 1); pvm_pkint(&info.mytid, 1, 1); pvm_pkint(info.local_clock, 1, 1); pvm_pkint(info.my_lift_number, 1, 1); pvm_bcast(GROUP, MSG_REQUEST); *info.my_request_timestamp = *info.local_clock; char diag[200]; sprintf(diag, "bcast MSG_REQUEST [timestamp=%d, lift_number=%s]", *info.local_clock, stringify(*info.my_lift_number)); diag_msg(info.mstrtid, info.mytid, diag); }
void bcast_release_msg(struct state_info info) { int tag = MSG_RELEASE; *info.local_clock += 1; pvm_initsend(PvmDataDefault); pvm_pkint(&tag, 1, 1); pvm_pkint(&info.mytid, 1, 1); pvm_pkint(info.local_clock, 1, 1); pvm_pkint(info.my_lift_number, 1, 1); pvm_bcast(GROUP, MSG_RELEASE); // Unallocate space on the lift int *my_weight_ptr = g_hash_table_lookup(info.skiers_weights, &info.mytid); int my_weight = *my_weight_ptr; int *lift_free = (*info.my_lift_number == LIFT_1 ? info.lift1_free : info.lift2_free); *lift_free += my_weight; char diag[200]; sprintf(diag, "bcast MSG_RELEASE [timestamp=%d, lift_number=%s]", *info.local_clock, stringify(*info.my_lift_number)); diag_msg(info.mstrtid, info.mytid, diag); }