From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id AA6D83858024; Sat, 22 May 2021 16:03:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AA6D83858024 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Corinna Vinschen To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: POSIX msg queues: improve error output in fixup_after_fork X-Act-Checkin: newlib-cygwin X-Git-Author: Corinna Vinschen X-Git-Refname: refs/heads/master X-Git-Oldrev: a9c8050c363cfaa959004231adad8456b4df5c32 X-Git-Newrev: 49b84cb264c3be68d8e15f8ccde28a92410a7c0c Message-Id: <20210522160325.AA6D83858024@sourceware.org> Date: Sat, 22 May 2021 16:03:25 +0000 (GMT) X-BeenThere: cygwin-cvs@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Cygwin core component git logs List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 22 May 2021 16:03:25 -0000 https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=49b84cb264c3be68d8e15f8ccde28a92410a7c0c commit 49b84cb264c3be68d8e15f8ccde28a92410a7c0c Author: Corinna Vinschen Date: Fri May 21 17:47:14 2021 +0200 Cygwin: POSIX msg queues: improve error output in fixup_after_fork Signed-off-by: Corinna Vinschen Diff: --- winsup/cygwin/fhandler_mqueue.cc | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/winsup/cygwin/fhandler_mqueue.cc b/winsup/cygwin/fhandler_mqueue.cc index 06ccf2f1e..6fc17c28c 100644 --- a/winsup/cygwin/fhandler_mqueue.cc +++ b/winsup/cygwin/fhandler_mqueue.cc @@ -136,28 +136,35 @@ fhandler_mqueue::fixup_after_fork (HANDLE parent) SIZE_T filesize = mqinfo ()->mqi_sectsize; NTSTATUS status; - DuplicateHandle (parent, mqinfo ()->mqi_sect, - GetCurrentProcess (), &mqinfo ()->mqi_sect, - 0, FALSE, DUPLICATE_SAME_ACCESS); + if (!DuplicateHandle (parent, mqinfo ()->mqi_sect, + GetCurrentProcess (), &mqinfo ()->mqi_sect, + 0, FALSE, DUPLICATE_SAME_ACCESS)) + __leave; status = NtMapViewOfSection (mqinfo ()->mqi_sect, NtCurrentProcess (), &mptr, 0, filesize, NULL, &filesize, ViewShare, 0, PAGE_READWRITE); if (!NT_SUCCESS (status)) - api_fatal ("Mapping message queue failed in fork\n"); - else - mqinfo ()->mqi_hdr = (struct mq_hdr *) mptr; - DuplicateHandle (parent, mqinfo ()->mqi_waitsend, - GetCurrentProcess (), &mqinfo ()->mqi_waitsend, - 0, FALSE, DUPLICATE_SAME_ACCESS); - DuplicateHandle (parent, mqinfo ()->mqi_waitrecv, - GetCurrentProcess (), &mqinfo ()->mqi_waitrecv, - 0, FALSE, DUPLICATE_SAME_ACCESS); - DuplicateHandle (parent, mqinfo ()->mqi_lock, - GetCurrentProcess (), &mqinfo ()->mqi_lock, - 0, FALSE, DUPLICATE_SAME_ACCESS); + api_fatal ("Mapping message queue failed in fork, status 0x%x\n", + status); + + mqinfo ()->mqi_hdr = (struct mq_hdr *) mptr; + if (!DuplicateHandle (parent, mqinfo ()->mqi_waitsend, + GetCurrentProcess (), &mqinfo ()->mqi_waitsend, + 0, FALSE, DUPLICATE_SAME_ACCESS)) + __leave; + if (!DuplicateHandle (parent, mqinfo ()->mqi_waitrecv, + GetCurrentProcess (), &mqinfo ()->mqi_waitrecv, + 0, FALSE, DUPLICATE_SAME_ACCESS)) + __leave; + if (!DuplicateHandle (parent, mqinfo ()->mqi_lock, + GetCurrentProcess (), &mqinfo ()->mqi_lock, + 0, FALSE, DUPLICATE_SAME_ACCESS)) + __leave; + return; } __except (EFAULT) {} __endtry + api_fatal ("Creating IPC object failed in fork, %E"); } int