37
37
*
38
38
*
39
39
* IDENTIFICATION
40
- * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.585 2009/07/24 20:12:42 mha Exp $
40
+ * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.586 2009/08/06 09:50:22 mha Exp $
41
41
*
42
42
* NOTES
43
43
*
@@ -3627,7 +3627,7 @@ internal_forkexec(int argc, char *argv[], Port *port)
3627
3627
* mess with the half-started process
3628
3628
*/
3629
3629
if (!TerminateProcess (pi .hProcess , 255 ))
3630
- ereport (ERROR ,
3630
+ ereport (LOG ,
3631
3631
(errmsg_internal ("could not terminate unstarted process: error code %d" ,
3632
3632
(int ) GetLastError ())));
3633
3633
CloseHandle (pi .hProcess );
@@ -3654,7 +3654,7 @@ internal_forkexec(int argc, char *argv[], Port *port)
3654
3654
* process and give up.
3655
3655
*/
3656
3656
if (!TerminateProcess (pi .hProcess , 255 ))
3657
- ereport (ERROR ,
3657
+ ereport (LOG ,
3658
3658
(errmsg_internal ("could not terminate process that failed to reserve memory: error code %d" ,
3659
3659
(int ) GetLastError ())));
3660
3660
CloseHandle (pi .hProcess );
@@ -3671,7 +3671,7 @@ internal_forkexec(int argc, char *argv[], Port *port)
3671
3671
{
3672
3672
if (!TerminateProcess (pi .hProcess , 255 ))
3673
3673
{
3674
- ereport (ERROR ,
3674
+ ereport (LOG ,
3675
3675
(errmsg_internal ("could not terminate unstartable process: error code %d" ,
3676
3676
(int ) GetLastError ())));
3677
3677
CloseHandle (pi .hProcess );
@@ -3680,7 +3680,7 @@ internal_forkexec(int argc, char *argv[], Port *port)
3680
3680
}
3681
3681
CloseHandle (pi .hProcess );
3682
3682
CloseHandle (pi .hThread );
3683
- ereport (ERROR ,
3683
+ ereport (LOG ,
3684
3684
(errmsg_internal ("could not resume thread of unstarted process: error code %d" ,
3685
3685
(int ) GetLastError ())));
3686
3686
return -1 ;
@@ -4430,8 +4430,8 @@ extern int pgStatSock;
4430
4430
#define write_inheritable_socket (dest , src , childpid ) (*(dest) = (src))
4431
4431
#define read_inheritable_socket (dest , src ) (*(dest) = *(src))
4432
4432
#else
4433
- static void write_duplicated_handle (HANDLE * dest , HANDLE src , HANDLE child );
4434
- static void write_inheritable_socket (InheritableSocket * dest , SOCKET src ,
4433
+ static bool write_duplicated_handle (HANDLE * dest , HANDLE src , HANDLE child );
4434
+ static bool write_inheritable_socket (InheritableSocket * dest , SOCKET src ,
4435
4435
pid_t childPid );
4436
4436
static void read_inheritable_socket (SOCKET * dest , InheritableSocket * src );
4437
4437
#endif
@@ -4448,7 +4448,8 @@ save_backend_variables(BackendParameters *param, Port *port,
4448
4448
#endif
4449
4449
{
4450
4450
memcpy (& param -> port , port , sizeof (Port ));
4451
- write_inheritable_socket (& param -> portsocket , port -> sock , childPid );
4451
+ if (!write_inheritable_socket (& param -> portsocket , port -> sock , childPid ))
4452
+ return false;
4452
4453
4453
4454
strlcpy (param -> DataDir , DataDir , MAXPGPATH );
4454
4455
@@ -4469,7 +4470,8 @@ save_backend_variables(BackendParameters *param, Port *port,
4469
4470
param -> ProcGlobal = ProcGlobal ;
4470
4471
param -> AuxiliaryProcs = AuxiliaryProcs ;
4471
4472
param -> PMSignalState = PMSignalState ;
4472
- write_inheritable_socket (& param -> pgStatSock , pgStatSock , childPid );
4473
+ if (!write_inheritable_socket (& param -> pgStatSock , pgStatSock , childPid ))
4474
+ return false;
4473
4475
4474
4476
param -> PostmasterPid = PostmasterPid ;
4475
4477
param -> PgStartTime = PgStartTime ;
@@ -4479,9 +4481,10 @@ save_backend_variables(BackendParameters *param, Port *port,
4479
4481
4480
4482
#ifdef WIN32
4481
4483
param -> PostmasterHandle = PostmasterHandle ;
4482
- write_duplicated_handle (& param -> initial_signal_pipe ,
4484
+ if (! write_duplicated_handle (& param -> initial_signal_pipe ,
4483
4485
pgwin32_create_signal_listener (childPid ),
4484
- childProcess );
4486
+ childProcess ))
4487
+ return false;
4485
4488
#endif
4486
4489
4487
4490
memcpy (& param -> syslogPipe , & syslogPipe , sizeof (syslogPipe ));
@@ -4501,7 +4504,7 @@ save_backend_variables(BackendParameters *param, Port *port,
4501
4504
* Duplicate a handle for usage in a child process, and write the child
4502
4505
* process instance of the handle to the parameter file.
4503
4506
*/
4504
- static void
4507
+ static bool
4505
4508
write_duplicated_handle (HANDLE * dest , HANDLE src , HANDLE childProcess )
4506
4509
{
4507
4510
HANDLE hChild = INVALID_HANDLE_VALUE ;
@@ -4513,11 +4516,15 @@ write_duplicated_handle(HANDLE *dest, HANDLE src, HANDLE childProcess)
4513
4516
0 ,
4514
4517
TRUE,
4515
4518
DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS ))
4516
- ereport (ERROR ,
4519
+ {
4520
+ ereport (LOG ,
4517
4521
(errmsg_internal ("could not duplicate handle to be written to backend parameter file: error code %d" ,
4518
4522
(int ) GetLastError ())));
4523
+ return false;
4524
+ }
4519
4525
4520
4526
* dest = hChild ;
4527
+ return true;
4521
4528
}
4522
4529
4523
4530
/*
@@ -4527,18 +4534,22 @@ write_duplicated_handle(HANDLE *dest, HANDLE src, HANDLE childProcess)
4527
4534
* common on Windows (antivirus, firewalls, download managers etc) break
4528
4535
* straight socket inheritance.
4529
4536
*/
4530
- static void
4537
+ static bool
4531
4538
write_inheritable_socket (InheritableSocket * dest , SOCKET src , pid_t childpid )
4532
4539
{
4533
4540
dest -> origsocket = src ;
4534
4541
if (src != 0 && src != -1 )
4535
4542
{
4536
4543
/* Actual socket */
4537
4544
if (WSADuplicateSocket (src , childpid , & dest -> wsainfo ) != 0 )
4538
- ereport (ERROR ,
4545
+ {
4546
+ ereport (LOG ,
4539
4547
(errmsg ("could not duplicate socket %d for use in backend: error code %d" ,
4540
4548
src , WSAGetLastError ())));
4549
+ return false;
4550
+ }
4541
4551
}
4552
+ return true;
4542
4553
}
4543
4554
4544
4555
/*
0 commit comments