Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4000170

Browse files
committed
Avoid terminating the postmaster on a number of "can't happen" cases during
backend startup on Win32. Instead, log the error and just forget aboutthe potentially dangling process, since we can't do anything about it anyway.
1 parent6403c35 commit4000170

File tree

1 file changed

+26
-15
lines changed

1 file changed

+26
-15
lines changed

‎src/backend/postmaster/postmaster.c

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
*
3838
*
3939
* 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 $
4141
*
4242
* NOTES
4343
*
@@ -3627,7 +3627,7 @@ internal_forkexec(int argc, char *argv[], Port *port)
36273627
* mess with the half-started process
36283628
*/
36293629
if (!TerminateProcess(pi.hProcess,255))
3630-
ereport(ERROR,
3630+
ereport(LOG,
36313631
(errmsg_internal("could not terminate unstarted process: error code %d",
36323632
(int)GetLastError())));
36333633
CloseHandle(pi.hProcess);
@@ -3654,7 +3654,7 @@ internal_forkexec(int argc, char *argv[], Port *port)
36543654
* process and give up.
36553655
*/
36563656
if (!TerminateProcess(pi.hProcess,255))
3657-
ereport(ERROR,
3657+
ereport(LOG,
36583658
(errmsg_internal("could not terminate process that failed to reserve memory: error code %d",
36593659
(int)GetLastError())));
36603660
CloseHandle(pi.hProcess);
@@ -3671,7 +3671,7 @@ internal_forkexec(int argc, char *argv[], Port *port)
36713671
{
36723672
if (!TerminateProcess(pi.hProcess,255))
36733673
{
3674-
ereport(ERROR,
3674+
ereport(LOG,
36753675
(errmsg_internal("could not terminate unstartable process: error code %d",
36763676
(int)GetLastError())));
36773677
CloseHandle(pi.hProcess);
@@ -3680,7 +3680,7 @@ internal_forkexec(int argc, char *argv[], Port *port)
36803680
}
36813681
CloseHandle(pi.hProcess);
36823682
CloseHandle(pi.hThread);
3683-
ereport(ERROR,
3683+
ereport(LOG,
36843684
(errmsg_internal("could not resume thread of unstarted process: error code %d",
36853685
(int)GetLastError())));
36863686
return-1;
@@ -4430,8 +4430,8 @@ extern intpgStatSock;
44304430
#definewrite_inheritable_socket(dest,src,childpid) (*(dest) = (src))
44314431
#defineread_inheritable_socket(dest,src) (*(dest) = *(src))
44324432
#else
4433-
staticvoidwrite_duplicated_handle(HANDLE*dest,HANDLEsrc,HANDLEchild);
4434-
staticvoidwrite_inheritable_socket(InheritableSocket*dest,SOCKETsrc,
4433+
staticboolwrite_duplicated_handle(HANDLE*dest,HANDLEsrc,HANDLEchild);
4434+
staticboolwrite_inheritable_socket(InheritableSocket*dest,SOCKETsrc,
44354435
pid_tchildPid);
44364436
staticvoidread_inheritable_socket(SOCKET*dest,InheritableSocket*src);
44374437
#endif
@@ -4448,7 +4448,8 @@ save_backend_variables(BackendParameters *param, Port *port,
44484448
#endif
44494449
{
44504450
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;
44524453

44534454
strlcpy(param->DataDir,DataDir,MAXPGPATH);
44544455

@@ -4469,7 +4470,8 @@ save_backend_variables(BackendParameters *param, Port *port,
44694470
param->ProcGlobal=ProcGlobal;
44704471
param->AuxiliaryProcs=AuxiliaryProcs;
44714472
param->PMSignalState=PMSignalState;
4472-
write_inheritable_socket(&param->pgStatSock,pgStatSock,childPid);
4473+
if (!write_inheritable_socket(&param->pgStatSock,pgStatSock,childPid))
4474+
return false;
44734475

44744476
param->PostmasterPid=PostmasterPid;
44754477
param->PgStartTime=PgStartTime;
@@ -4479,9 +4481,10 @@ save_backend_variables(BackendParameters *param, Port *port,
44794481

44804482
#ifdefWIN32
44814483
param->PostmasterHandle=PostmasterHandle;
4482-
write_duplicated_handle(&param->initial_signal_pipe,
4484+
if (!write_duplicated_handle(&param->initial_signal_pipe,
44834485
pgwin32_create_signal_listener(childPid),
4484-
childProcess);
4486+
childProcess))
4487+
return false;
44854488
#endif
44864489

44874490
memcpy(&param->syslogPipe,&syslogPipe,sizeof(syslogPipe));
@@ -4501,7 +4504,7 @@ save_backend_variables(BackendParameters *param, Port *port,
45014504
* Duplicate a handle for usage in a child process, and write the child
45024505
* process instance of the handle to the parameter file.
45034506
*/
4504-
staticvoid
4507+
staticbool
45054508
write_duplicated_handle(HANDLE*dest,HANDLEsrc,HANDLEchildProcess)
45064509
{
45074510
HANDLEhChild=INVALID_HANDLE_VALUE;
@@ -4513,11 +4516,15 @@ write_duplicated_handle(HANDLE *dest, HANDLE src, HANDLE childProcess)
45134516
0,
45144517
TRUE,
45154518
DUPLICATE_CLOSE_SOURCE |DUPLICATE_SAME_ACCESS))
4516-
ereport(ERROR,
4519+
{
4520+
ereport(LOG,
45174521
(errmsg_internal("could not duplicate handle to be written to backend parameter file: error code %d",
45184522
(int)GetLastError())));
4523+
return false;
4524+
}
45194525

45204526
*dest=hChild;
4527+
return true;
45214528
}
45224529

45234530
/*
@@ -4527,18 +4534,22 @@ write_duplicated_handle(HANDLE *dest, HANDLE src, HANDLE childProcess)
45274534
* common on Windows (antivirus, firewalls, download managers etc) break
45284535
* straight socket inheritance.
45294536
*/
4530-
staticvoid
4537+
staticbool
45314538
write_inheritable_socket(InheritableSocket*dest,SOCKETsrc,pid_tchildpid)
45324539
{
45334540
dest->origsocket=src;
45344541
if (src!=0&&src!=-1)
45354542
{
45364543
/* Actual socket */
45374544
if (WSADuplicateSocket(src,childpid,&dest->wsainfo)!=0)
4538-
ereport(ERROR,
4545+
{
4546+
ereport(LOG,
45394547
(errmsg("could not duplicate socket %d for use in backend: error code %d",
45404548
src,WSAGetLastError())));
4549+
return false;
4550+
}
45414551
}
4552+
return true;
45424553
}
45434554

45444555
/*

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp