11
11
*
12
12
*
13
13
* IDENTIFICATION
14
- * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.198 2000/12/03 20:45:34 tgl Exp $
14
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.199 2000/12/18 17:33:40 tgl Exp $
15
15
*
16
16
* NOTES
17
17
*
@@ -217,7 +217,7 @@ static int initMasks(fd_set *rmask, fd_set *wmask);
217
217
static char * canAcceptConnections (void );
218
218
static long PostmasterRandom (void );
219
219
static void RandomSalt (char * salt );
220
- static void SignalChildren (SIGNAL_ARGS );
220
+ static void SignalChildren (int signal );
221
221
static int CountChildren (void );
222
222
static bool CreateOptsFile (int argc , char * argv []);
223
223
@@ -1303,10 +1303,13 @@ reset_shared(unsigned short port)
1303
1303
static void
1304
1304
SIGHUP_handler (SIGNAL_ARGS )
1305
1305
{
1306
+ int save_errno = errno ;
1307
+
1306
1308
if (Shutdown > SmartShutdown )
1307
1309
return ;
1308
1310
got_SIGHUP = true;
1309
1311
SignalChildren (SIGHUP );
1312
+ errno = save_errno ;
1310
1313
}
1311
1314
1312
1315
@@ -1317,6 +1320,8 @@ SIGHUP_handler(SIGNAL_ARGS)
1317
1320
static void
1318
1321
pmdie (SIGNAL_ARGS )
1319
1322
{
1323
+ int save_errno = errno ;
1324
+
1320
1325
PG_SETMASK (& BlockSig );
1321
1326
1322
1327
if (DebugLvl >= 1 )
@@ -1330,8 +1335,12 @@ pmdie(SIGNAL_ARGS)
1330
1335
* Send SIGUSR2 to all children (AsyncNotifyHandler)
1331
1336
*/
1332
1337
if (Shutdown > SmartShutdown )
1338
+ {
1339
+ errno = save_errno ;
1333
1340
return ;
1341
+ }
1334
1342
SignalChildren (SIGUSR2 );
1343
+ errno = save_errno ;
1335
1344
return ;
1336
1345
1337
1346
case SIGTERM :
@@ -1342,24 +1351,34 @@ pmdie(SIGNAL_ARGS)
1342
1351
* let children to end their work and ShutdownDataBase.
1343
1352
*/
1344
1353
if (Shutdown >= SmartShutdown )
1354
+ {
1355
+ errno = save_errno ;
1345
1356
return ;
1357
+ }
1346
1358
Shutdown = SmartShutdown ;
1347
1359
tnow = time (NULL );
1348
1360
fprintf (stderr , "Smart Shutdown request at %s" , ctime (& tnow ));
1349
1361
fflush (stderr );
1350
1362
if (DLGetHead (BackendList )) /* let reaper() handle this */
1363
+ {
1364
+ errno = save_errno ;
1351
1365
return ;
1366
+ }
1352
1367
1353
1368
/*
1354
1369
* No children left. Shutdown data base system.
1355
1370
*/
1356
1371
if (StartupPID > 0 || FatalError ) /* let reaper() handle
1357
1372
* this */
1373
+ {
1374
+ errno = save_errno ;
1358
1375
return ;
1376
+ }
1359
1377
if (ShutdownPID > 0 )
1360
1378
abort ();
1361
1379
1362
1380
ShutdownPID = ShutdownDataBase ();
1381
+ errno = save_errno ;
1363
1382
return ;
1364
1383
1365
1384
case SIGINT :
@@ -1371,7 +1390,10 @@ pmdie(SIGNAL_ARGS)
1371
1390
* and exit) and ShutdownDataBase.
1372
1391
*/
1373
1392
if (Shutdown >= FastShutdown )
1393
+ {
1394
+ errno = save_errno ;
1374
1395
return ;
1396
+ }
1375
1397
tnow = time (NULL );
1376
1398
fprintf (stderr , "Fast Shutdown request at %s" , ctime (& tnow ));
1377
1399
fflush (stderr );
@@ -1384,11 +1406,13 @@ pmdie(SIGNAL_ARGS)
1384
1406
fflush (stderr );
1385
1407
SignalChildren (SIGTERM );
1386
1408
}
1409
+ errno = save_errno ;
1387
1410
return ;
1388
1411
}
1389
1412
if (Shutdown > NoShutdown )
1390
1413
{
1391
1414
Shutdown = FastShutdown ;
1415
+ errno = save_errno ;
1392
1416
return ;
1393
1417
}
1394
1418
Shutdown = FastShutdown ;
@@ -1398,11 +1422,15 @@ pmdie(SIGNAL_ARGS)
1398
1422
*/
1399
1423
if (StartupPID > 0 || FatalError ) /* let reaper() handle
1400
1424
* this */
1425
+ {
1426
+ errno = save_errno ;
1401
1427
return ;
1428
+ }
1402
1429
if (ShutdownPID > 0 )
1403
1430
abort ();
1404
1431
1405
1432
ShutdownPID = ShutdownDataBase ();
1433
+ errno = save_errno ;
1406
1434
return ;
1407
1435
1408
1436
case SIGQUIT :
@@ -1435,18 +1463,18 @@ pmdie(SIGNAL_ARGS)
1435
1463
static void
1436
1464
reaper (SIGNAL_ARGS )
1437
1465
{
1438
- /* GH: replace waitpid for !HAVE_WAITPID. Does this work ? */
1466
+ int save_errno = errno ;
1439
1467
#ifdef HAVE_WAITPID
1440
1468
int status ; /* backend exit status */
1441
-
1442
1469
#else
1443
1470
union wait status ; /* backend exit status */
1444
-
1445
1471
#endif
1446
1472
int exitstatus ;
1447
1473
int pid ; /* process id of dead backend */
1448
1474
1449
1475
PG_SETMASK (& BlockSig );
1476
+ /* It's not really necessary to reset the handler each time is it? */
1477
+ pqsignal (SIGCHLD , reaper );
1450
1478
1451
1479
if (DebugLvl )
1452
1480
fprintf (stderr , "%s: reaping dead processes...\n" ,
@@ -1499,12 +1527,11 @@ reaper(SIGNAL_ARGS)
1499
1527
CheckPointPID = 0 ;
1500
1528
checkpointed = time (NULL );
1501
1529
1502
- pqsignal ( SIGCHLD , reaper ) ;
1530
+ errno = save_errno ;
1503
1531
return ;
1504
1532
}
1505
1533
CleanupProc (pid , exitstatus );
1506
1534
}
1507
- pqsignal (SIGCHLD , reaper );
1508
1535
1509
1536
if (FatalError )
1510
1537
{
@@ -1513,9 +1540,15 @@ reaper(SIGNAL_ARGS)
1513
1540
* Wait for all children exit, then reset shmem and StartupDataBase.
1514
1541
*/
1515
1542
if (DLGetHead (BackendList ))
1543
+ {
1544
+ errno = save_errno ;
1516
1545
return ;
1546
+ }
1517
1547
if (StartupPID > 0 || ShutdownPID > 0 )
1548
+ {
1549
+ errno = save_errno ;
1518
1550
return ;
1551
+ }
1519
1552
tnow = time (NULL );
1520
1553
fprintf (stderr , "Server processes were terminated at %s"
1521
1554
"Reinitializing shared memory and semaphores\n" ,
@@ -1526,18 +1559,26 @@ reaper(SIGNAL_ARGS)
1526
1559
reset_shared (PostPortNumber );
1527
1560
1528
1561
StartupPID = StartupDataBase ();
1562
+ errno = save_errno ;
1529
1563
return ;
1530
1564
}
1531
1565
1532
1566
if (Shutdown > NoShutdown )
1533
1567
{
1534
1568
if (DLGetHead (BackendList ))
1569
+ {
1570
+ errno = save_errno ;
1535
1571
return ;
1572
+ }
1536
1573
if (StartupPID > 0 || ShutdownPID > 0 )
1574
+ {
1575
+ errno = save_errno ;
1537
1576
return ;
1577
+ }
1538
1578
ShutdownPID = ShutdownDataBase ();
1539
1579
}
1540
1580
1581
+ errno = save_errno ;
1541
1582
}
1542
1583
1543
1584
/*
@@ -2002,6 +2043,7 @@ ExitPostmaster(int status)
2002
2043
static void
2003
2044
dumpstatus (SIGNAL_ARGS )
2004
2045
{
2046
+ int save_errno = errno ;
2005
2047
Dlelem * curr ;
2006
2048
2007
2049
PG_SETMASK (& BlockSig );
@@ -2015,6 +2057,7 @@ dumpstatus(SIGNAL_ARGS)
2015
2057
fprintf (stderr , "\tsock %d\n" , port -> sock );
2016
2058
curr = DLGetSucc (curr );
2017
2059
}
2060
+ errno = save_errno ;
2018
2061
}
2019
2062
2020
2063
/*
0 commit comments