| | 2056 | | startack(wp, mp) |
| | 2057 | | struct waitc *wp; |
| | 2058 | | struct pmsg *mp; |
| | 2059 | | { |
| | 2060 | | struct hostd *hp; |
| | 2061 | | struct pmsg *mp2; |
| | 2062 | | struct waitc *wp2; |
| | 2063 | | struct waitc *wp3; |
| | 2064 | | int count; |
| | 2065 | | int happy; |
| | 2066 | | struct waitc_add *wxp; |
| | | | ... |
| | 2070 | | int i, j; |
| | 2071 | | int t; |
| | 2072 | | int hh; |
| | 2073 | | char *buf; |
| | 2074 | | char buf2[256]; |
| | 2075 | | |
| | 2076 | | |
| | 2077 | | |
| | 2078 | | |
| | 2079 | | |
| | 2080 | | wxp = (struct waitc_add *)wp->wa_spec; |
| | 2081 | | count = wxp->w_num; |
| | 2082 | | upkint(mp, &j); |
| | 2083 | | |
| | 2084 | | while (j-- > 0) { |
| | 2085 | | if (upkuint(mp, &t) || upkstralloc(mp, &buf)) { |
| | 2086 | | pvmlogerror("startack() bad message format\n"); |
| | 2087 | | pkint(wp->wa_mesg, PvmDSysErr);
|
| | 2088 | | sendmessage(wp->wa_mesg); |
| | 2089 | | wp->wa_mesg = 0; |
| | 2090 | | wait_delete(wp); |
| | 2091 | | busyadding = 0; |
| | 2092 | | return 0; |
| | 2093 | | } |
| | 2094 | | for (i = count; i-- > 0 && wxp->w_hosts[i]->hd_hostpart != t; ) ; |
| | | | ... |
| | 2127 | | hp->hd_mtu = atoi(av[3]); |
| | 2128 | | hp->hd_dsig = atoi(av[4]); |
| | 2129 | | |
| | 2130 | | PVM_FREE(buf);
|
| | 2131 | | } |
| | 2132 | | |
| | 2133 | | |
| | 2134 | | |
| | 2135 | | |
| | 2136 | | |
| | 2137 | | mp2 = wp->wa_mesg; |
| | 2138 | | pkint(mp2, count); |
| | 2139 | | pkint(mp2, 0); |
| | 2140 | | for (i = 0; i < count; i++) { |
| | 2141 | | hp = wxp->w_hosts[i]; |
| | 2142 | | if (hp->hd_err) { |
| | 2143 | | pkint(mp2, hp->hd_err); |
| | 2144 | | pkstr(mp2, ""); |
| | 2145 | | pkstr(mp2, ""); |
| | 2146 | | pkint(mp2, 0); |
| | 2147 | | pkint(mp2, 0); |
| | 2148 | | |
| | 2149 | | } else { |
| | 2150 | | pkint(mp2, hp->hd_hostpart); |
| | 2151 | | pkstr(mp2, hp->hd_name); |
| | 2152 | | pkstr(mp2, hp->hd_arch); |
| | 2153 | | pkint(mp2, hp->hd_speed); |
| | 2154 | | pkint(mp2, hp->hd_dsig); |
| | 2155 | | } |
| | 2156 | | } |
| | 2157 | | |
| | 2158 | | |
| | 2159 | | |
| | 2160 | | |
| | 2161 | | |
| | 2162 | | |
| | 2163 | | for (j = i = 0; i < count; i++) |
| | 2164 | | if (!wxp->w_hosts[i]->hd_err) { |
| | 2165 | | hp = wxp->w_hosts[i]; |
| | 2166 | | wxp->w_hosts[i] = 0; |
| | 2167 | | wxp->w_hosts[j++] = hp; |
| | 2168 | | |
| | 2169 | | } else { |
| | 2170 | | hd_unref(wxp->w_hosts[i]); |
| | 2171 | | wxp->w_hosts[i] = 0; |
| | 2172 | | } |
| | 2173 | | count = j; |
| | 2174 | | |
| | 2175 | | if (count < 1) { |
| | 2176 | | busyadding = 0; |
| | 2177 | | sendmessage(wp->wa_mesg); |
| | 2178 | | wp->wa_mesg = 0; |
| | 2179 | | free_waitc_add(wxp); |
| | 2180 | | wait_delete(wp); |
| | 2181 | | return 0; |
| | 2182 | | } |
| | 2183 | | |
| | 2184 | | wp2 = wait_new(WT_HTUPD);
|
| | 2185 | | wp2->wa_dep = wp->wa_dep; |
| | 2186 | | wp2->wa_mesg = wp->wa_mesg; |
| | 2187 | | wp->wa_mesg = 0; |
| | 2188 | | |
| | 2189 | | |
| | 2190 | | |
| | 2191 | | |
| | 2192 | | |
| | 2193 | | newhosts = ht_new(1); |
| | 2194 | | newhosts->ht_serial = hosts->ht_serial + 1; |
| | 2195 | | newhosts->ht_master = hosts->ht_master; |
| | 2196 | | newhosts->ht_cons = hosts->ht_cons; |
| | 2197 | | newhosts->ht_local = hosts->ht_local; |
| | 2198 | | |
| | 2199 | | for (i = 0; i < count; i++) |
| | 2200 | | ht_insert(newhosts, wxp->w_hosts[i]); |
| | 2201 | | |
| | 2202 | | free_waitc_add(wxp); |
| | 2203 | | wait_delete(wp); |
| | 2204 | | wp = 0; |
| | 2205 | | |
| | 2206 | | runstate = PVMDHTUPD;
|
| | 2207 | | |
| | 2208 | | |
| | 2209 | | |
| | 2210 | | |
| | 2211 | | |
| | 2212 | | for (hh = newhosts->ht_last; hh > 0; hh--) |
| | 2213 | | if (hp = newhosts->ht_hosts[hh]) { |
| | 2214 | | mp2 = mesg_new(0); |
| | 2215 | | mp2->m_tag = DM_SLCONF;
|
| | 2216 | | mp2->m_dst = hp->hd_hostpart | TIDPVMD;
|
| | 2217 | | if (hp->hd_epath) { |
| | 2218 | | pkint(mp2, DM_SLCONF_EP);
|
| | 2219 | | pkstr(mp2, hp->hd_epath); |
| | 2220 | | } |
| | 2221 | | if (hp->hd_bpath) { |
| | 2222 | | pkint(mp2, DM_SLCONF_BP);
|
| | 2223 | | pkstr(mp2, hp->hd_bpath); |
| | 2224 | | } |
| | 2225 | | if (hp->hd_wdir) { |
| | 2226 | | pkint(mp2, DM_SLCONF_WD);
|
| | 2227 | | pkstr(mp2, hp->hd_wdir); |
| | 2228 | | } |
| | 2229 | | if (pvmschedtid) { |
| | 2230 | | sprintf(buf2, "%x", pvmschedtid); |
| | 2231 | | pkint(mp2, DM_SLCONF_SCHED);
|
| | 2232 | | pkstr(mp2, buf2); |
| | 2233 | | } |
| | 2234 | | if (pvmtracer.trctid || pvmtracer.outtid) { |
| | 2235 | | sprintf(buf2, "%x %d %d %x %d %d %d %d %s", |
| | 2236 | | pvmtracer.trctid, pvmtracer.trcctx, |
| | 2237 | | pvmtracer.trctag, |
| | 2238 | | pvmtracer.outtid, pvmtracer.outctx, |
| | 2239 | | pvmtracer.outtag, |
| | 2240 | | pvmtracer.trcbuf, pvmtracer.trcopt, |
| | 2241 | | pvmtracer.tmask); |
| | 2242 | | pkint(mp2, DM_SLCONF_TRACE);
|
| | 2243 | | pkstr(mp2, buf2); |
| | 2244 | | } |
| | 2245 | | sendmessage(mp2); |
| | 2246 | | } |
| | 2247 | | |
| | 2248 | | |
| | 2249 | | |
| | 2250 | | |
| | 2251 | | |
| | 2252 | | |