| | 2943 | | dm_db(hp, mp) |
| | 2944 | | struct hostd *hp; |
| | 2945 | | struct pmsg *mp; |
| | 2946 | | { |
| | 2947 | | int opcode; |
| | 2948 | | int tid; |
| | 2949 | | int req; |
| | 2950 | | int flags; |
| | 2951 | | char *name = 0; |
| | 2952 | | struct pmsg *mp2 = 0; |
| | 2953 | | struct pmsg *mp3 = 0; |
| | 2954 | | |
| | 2955 | | struct waitc *wp, *wp2; |
| | 2956 | | struct pmsg *mp4 = 0; |
| | 2957 | | struct hostd *hp2; |
| | 2958 | | |
| | 2959 | | struct pvmmclass *np, *np2; |
| | 2960 | | struct pvmmentry *ep, *ep2; |
| | 2961 | | int *noresets; |
| | 2962 | | int nnr; |
| | 2963 | | int found; |
| | 2964 | | int cc; |
| | 2965 | | int i; |
| | 2966 | | int notified; |
| | 2967 | | |
| | 2968 | | hp = hp; |
| | 2969 | | |
| | 2970 | | if (upkint(mp, &opcode) || upkint(mp, &tid) |
| | 2971 | | || upkstralloc(mp, &name) || upkint(mp, &req) || upkint(mp, &flags)) |
| | 2972 | | goto badformat; |
| | 2973 | | |
| | 2974 | | mp2 = mesg_new(0); |
| | 2975 | | mp2->m_dst = mp->m_src; |
| | 2976 | | mp2->m_tag = DM_DBACK;
|
| | 2977 | | mp2->m_wid = mp->m_wid; |
| | 2978 | | |
| | 2979 | | switch (opcode) { |
| | 2980 | | |
| | 2981 | | case TMDB_PUT:
|
| | 2982 | | mp3 = mesg_new(0); |
| | 2983 | | if (pmsg_unpack(mp, mp3)) |
| | 2984 | | goto badformat; |
| | 2985 | | if ((req = mb_insert(tid, name, req, flags, mp3)) < 0) |
| | 2986 | | pmsg_unref(mp3); |
| | 2987 | | else { |
| | 2988 | | |
| | 2989 | | |
| | 2990 | | notified = 0; |
| true | 2991 | | for (wp = waitlist->wa_link; wp != waitlist; wp = wp2) { |
| | 2992 | | wp2 = wp->wa_link; |
| | 2993 | | if (wp->wa_kind == WT_RECVINFO) {
|
| | 2994 | | ep = (struct pvmmentry *) wp->wa_spec; |
| | 2995 | | if ( !strcmp( (char *) ep->me_msg, name ) ) { |
| | 2996 | | cc = mb_lookup(ep->me_tid, (char *) ep->me_msg, |
| | 2997 | | ep->me_ind, ep->me_flags, &mp3); |
| | 2998 | | if ( cc != PvmNotFound ) {
|
| | 2999 | | pkint(wp->wa_mesg, cc); |
| | 3000 | | if (mp3) { |
| | 3001 | | pmsg_pack(wp->wa_mesg, mp3); |
| | 3002 | | pmsg_unref(mp3); |
| | 3003 | | } |
| | 3004 | | sendmessage(wp->wa_mesg); |
| | 3005 | | wp->wa_mesg = 0; |
| | 3006 | | PVM_FREE(ep->me_msg);
|
| | 3007 | | PVM_FREE(ep);
|
| | 3008 | | wait_delete(wp); |
| | 3009 | | } |
| | 3010 | | } |
| | 3011 | | } |
| | 3012 | | |
| | 3013 | | else if (wp->wa_kind == WT_TASKX) {
|
| | 3014 | | if ( wp->wa_on == tid && wp->wa_tid == pvmmytid ) |
| | 3015 | | notified++; |
| | 3016 | | } |
| | 3017 | | } |
| | 3018 | | |
| | 3019 | | |
| | 3020 | | if ( !notified ) { |
| | 3021 | | |