Changeset 7445 for trunk/tools
- Timestamp:
- Nov 24, 2001, 7:05:31 AM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/CmdQd/CmdQd.c
r7444 r7445 1 /* $Id: CmdQd.c,v 1. 9 2001-11-24 02:21:39bird Exp $1 /* $Id: CmdQd.c,v 1.10 2001-11-24 06:05:31 bird Exp $ 2 2 * 3 3 * Command Queue Daemon / Client. … … 182 182 msgShowFailedJobs = 13, 183 183 msgShowFailedJobsResponse = 14, 184 msgSharedMemOwnerDied = 0xfd, 185 msgClientOwnerDied = 0xfe, 184 186 msgDying = 0xff 185 187 } enmMsgType; … … 513 515 rc = DosExecPgm(NULL, 0, EXEC_BACKGROUND, &szArg[0], NULL, &Res, &szArg[0]); 514 516 if (rc) 515 Error("Fatal error: Failed to start daemon. rc=%d\n" );517 Error("Fatal error: Failed to start daemon. rc=%d\n", rc); 516 518 return rc; 517 519 } … … 1201 1203 1202 1204 1205 case msgClientOwnerDied: 1206 { 1207 DosCloseMutexSem(pShrMem->hmtxClient); 1208 rc = DosCreateMutexSem(NULL, &pShrMem->hmtxClient, DC_SEM_SHARED, FALSE); 1209 if (rc) 1210 Error("Failed to restore dead client semaphore\n"); 1211 pShrMem->enmMsgType = msgUnknown; 1212 rc = shrmemSendDaemon(TRUE); 1213 break; 1214 } 1215 1216 1217 case msgSharedMemOwnerDied: 1218 { 1219 DosCloseMutexSem(pShrMem->hmtx); 1220 rc = DosCreateMutexSem(NULL, &pShrMem->hmtx, DC_SEM_SHARED, TRUE); 1221 if (rc) 1222 Error("Failed to restore dead shared mem semaphore\n"); 1223 pShrMem->enmMsgType = msgUnknown; 1224 rc = shrmemSendDaemon(TRUE); 1225 break; 1226 } 1203 1227 1204 1228 1205 1229 default: 1206 Error("Internal error: Invalid message id %d\n", pShrMem->enmMsgType );1230 Error("Internal error: Invalid message id %d\n", pShrMem->enmMsgType, rc); 1207 1231 pShrMem->enmMsgType = msgUnknown; 1208 1232 rc = shrmemSendDaemon(TRUE); … … 1871 1895 if (cch > sizeof(pShrMem->u1.Submit.szCommand)) 1872 1896 { 1873 Error("Fatal error: Command too long.\n" );1897 Error("Fatal error: Command too long.\n", rc); 1874 1898 shrmemFree(); 1875 1899 return -1; … … 2271 2295 { 2272 2296 int rc; 2273 2297 ULONG ulIgnore; 2298 2299 /* 2300 * Get memory. 2301 */ 2274 2302 rc = DosGetNamedSharedMem((PPVOID)(PVOID)&pShrMem, 2275 2303 SHARED_MEM_NAME, … … 2277 2305 if (rc) 2278 2306 { 2279 Error("Fatal error: Failed to open shared memory. rc=%d\n" );2307 Error("Fatal error: Failed to open shared memory. rc=%d\n", rc); 2280 2308 return rc; 2281 2309 } 2282 2310 2311 2312 /* 2313 * Open semaphores. 2314 */ 2283 2315 rc = DosOpenEventSem(NULL, &pShrMem->hevClient); 2284 2316 if (rc) 2285 2317 { 2286 Error("Fatal error: Failed to open client event semaphore. rc=%d\n" );2318 Error("Fatal error: Failed to open client event semaphore. rc=%d\n", rc); 2287 2319 DosFreeMem(pShrMem); 2288 2320 return rc; … … 2292 2324 if (rc) 2293 2325 { 2294 Error("Fatal error: Failed to open daemon event semaphore. rc=%d\n" );2326 Error("Fatal error: Failed to open daemon event semaphore. rc=%d\n", rc); 2295 2327 DosCloseEventSem(pShrMem->hevClient); 2296 2328 DosFreeMem(pShrMem); … … 2301 2333 if (rc) 2302 2334 { 2303 Error("Fatal error: Failed to open mutex semaphore. rc=%d\n"); 2304 DosCloseEventSem(pShrMem->hevClient); 2305 DosCloseEventSem(pShrMem->hevDaemon); 2306 DosFreeMem(pShrMem); 2307 return rc; 2335 /* try correct client died situation */ 2336 if (rc == ERROR_SEM_OWNER_DIED) 2337 { 2338 pShrMem->enmMsgType = msgSharedMemOwnerDied; 2339 DosResetEventSem(pShrMem->hevClient, &ulIgnore); 2340 DosPostEventSem(pShrMem->hevDaemon); 2341 if (DosWaitEventSem(pShrMem->hevClient, 2000)) 2342 { 2343 Error("Fatal error: Failed to open mutex semaphore. (owner dead) rc=%d\n", rc); 2344 shrmemFree(); 2345 return rc; 2346 } 2347 rc = DosOpenMutexSem(NULL, &pShrMem->hmtx); 2348 } 2349 2350 if (rc) 2351 { 2352 Error("Fatal error: Failed to open mutex semaphore. rc=%d\n", rc); 2353 DosCloseEventSem(pShrMem->hevClient); 2354 DosCloseEventSem(pShrMem->hevDaemon); 2355 DosFreeMem(pShrMem); 2356 return rc; 2357 } 2308 2358 } 2309 2359 … … 2311 2361 if (rc) 2312 2362 { 2313 Error("Fatal error: Failed to open client mutex semaphore. rc=%d\n"); 2314 DosCloseEventSem(pShrMem->hevClient); 2315 DosCloseEventSem(pShrMem->hevDaemon); 2316 DosCloseMutexSem(pShrMem->hmtx); 2317 DosFreeMem(pShrMem); 2318 return rc; 2319 } 2320 2321 rc = DosRequestMutexSem(pShrMem->hmtxClient, SEM_INDEFINITE_WAIT); 2322 if (rc) 2323 { 2324 Error("Fatal error: Failed to open take ownership of client mutex semaphore. rc=%d\n"); 2325 shrmemFree(); 2326 return rc; 2327 } 2328 2329 rc = DosRequestMutexSem(pShrMem->hmtx, SEM_INDEFINITE_WAIT); 2330 if (rc) 2331 { 2332 Error("Fatal error: Failed to open take ownership of mutex semaphore. rc=%d\n"); 2333 shrmemFree(); 2334 return rc; 2363 /* try correct client died situation */ 2364 if (rc == ERROR_SEM_OWNER_DIED) 2365 { 2366 pShrMem->enmMsgType = msgClientOwnerDied; 2367 DosResetEventSem(pShrMem->hevClient, &ulIgnore); 2368 DosPostEventSem(pShrMem->hevDaemon); 2369 if (DosWaitEventSem(pShrMem->hevClient, 2000)) 2370 { 2371 Error("Fatal error: Failed to open client mutex semaphore. (owner dead) rc=%d\n", rc); 2372 shrmemFree(); 2373 return rc; 2374 } 2375 rc = DosOpenMutexSem(NULL, &pShrMem->hmtxClient); 2376 } 2377 2378 if (rc) 2379 { 2380 Error("Fatal error: Failed to open client mutex semaphore. rc=%d\n", rc); 2381 DosCloseEventSem(pShrMem->hevClient); 2382 DosCloseEventSem(pShrMem->hevDaemon); 2383 DosCloseMutexSem(pShrMem->hmtx); 2384 DosFreeMem(pShrMem); 2385 return rc; 2386 } 2335 2387 } 2336 2388 2337 2389 2338 2390 /* 2339 * Install signal handlers.2391 * Before we request semaphores we need to have signal handlers installed. 2340 2392 */ 2341 2393 signal(SIGSEGV, signalhandlerClient); … … 2344 2396 signal(SIGINT, signalhandlerClient); 2345 2397 signal(SIGBREAK,signalhandlerClient); 2398 2399 2400 /* 2401 * Request the necessary semaphores to be able to talk to the daemon. 2402 */ 2403 rc = DosRequestMutexSem(pShrMem->hmtxClient, SEM_INDEFINITE_WAIT); 2404 if (rc) 2405 { 2406 /* try correct client died situation */ 2407 if (rc == ERROR_SEM_OWNER_DIED) 2408 { 2409 pShrMem->enmMsgType = msgClientOwnerDied; 2410 DosResetEventSem(pShrMem->hevClient, &ulIgnore); 2411 DosPostEventSem(pShrMem->hevDaemon); 2412 if (DosWaitEventSem(pShrMem->hevClient, 2000)) 2413 { 2414 Error("Fatal error: Failed to take ownership of client mutex semaphore. (owner dead) rc=%d\n", rc); 2415 shrmemFree(); 2416 return rc; 2417 } 2418 rc = DosRequestMutexSem(pShrMem->hmtxClient, SEM_INDEFINITE_WAIT); 2419 } 2420 2421 if (rc) 2422 { 2423 Error("Fatal error: Failed to take ownership of client mutex semaphore. rc=%d\n", rc); 2424 shrmemFree(); 2425 return rc; 2426 } 2427 } 2428 2429 rc = DosRequestMutexSem(pShrMem->hmtx, SEM_INDEFINITE_WAIT); 2430 if (rc) 2431 { 2432 /* try correct client died situation */ 2433 if (rc == ERROR_SEM_OWNER_DIED) 2434 { 2435 pShrMem->enmMsgType = msgSharedMemOwnerDied; 2436 DosResetEventSem(pShrMem->hevClient, &ulIgnore); 2437 DosPostEventSem(pShrMem->hevDaemon); 2438 if (DosWaitEventSem(pShrMem->hevClient, 2000)) 2439 { 2440 Error("Fatal error: Failed to take ownership of mutex mutex semaphore. (owner dead) rc=%d\n", rc); 2441 shrmemFree(); 2442 return rc; 2443 } 2444 rc = DosRequestMutexSem(pShrMem->hmtx, SEM_INDEFINITE_WAIT); 2445 } 2446 2447 if (rc) 2448 { 2449 Error("Fatal error: Failed to take ownership of mutex semaphore. rc=%d\n", rc); 2450 shrmemFree(); 2451 return rc; 2452 } 2453 } 2454 2346 2455 2347 2456 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.