From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2155) id E1DD23835800; Wed, 12 May 2021 09:40:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E1DD23835800 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 message queues: simplify sync object creation X-Act-Checkin: newlib-cygwin X-Git-Author: Corinna Vinschen X-Git-Refname: refs/heads/master X-Git-Oldrev: 079c3a55874fa251b42101c5929a1cfdbf374978 X-Git-Newrev: 7b8edba6259fd8439fada6a2aaf1ecdef7b509d8 Message-Id: <20210512094037.E1DD23835800@sourceware.org> Date: Wed, 12 May 2021 09:40:37 +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: Wed, 12 May 2021 09:40:38 -0000 https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=7b8edba6259fd8439fada6a2aaf1ecdef7b509d8 commit 7b8edba6259fd8439fada6a2aaf1ecdef7b509d8 Author: Corinna Vinschen Date: Wed May 12 11:04:44 2021 +0200 Cygwin: POSIX message queues: simplify sync object creation Introduce new inline function mq_ipc_init to create all three required sync objects. Signed-off-by: Corinna Vinschen Diff: --- winsup/cygwin/posix_ipc.cc | 53 +++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/winsup/cygwin/posix_ipc.cc b/winsup/cygwin/posix_ipc.cc index fdecbca75..6b8c57fa0 100644 --- a/winsup/cygwin/posix_ipc.cc +++ b/winsup/cygwin/posix_ipc.cc @@ -410,6 +410,31 @@ struct mq_attr defattr = { 0, 10, 8192, 0 }; /* Linux defaults. */ extern "C" off_t lseek64 (int, off_t, int); extern "C" void *mmap64 (void *, size_t, int, int, int, off_t); +static inline int +_mq_ipc_init (struct mq_info *mqinfo, const char *name) +{ + int ret; + + /* Initialize mutex & condition variable */ + ret = ipc_mutex_init (&mqinfo->mqi_lock, name); + if (ret) + return ret; + ret = ipc_cond_init (&mqinfo->mqi_waitsend, name, 'S'); + if (ret) + { + ipc_mutex_close (mqinfo->mqi_lock); + return ret; + } + ret = ipc_cond_init (&mqinfo->mqi_waitrecv, name, 'R'); + if (ret) + { + ipc_cond_close (mqinfo->mqi_waitsend); + ipc_mutex_close (mqinfo->mqi_lock); + return ret; + } + return 0; +} + extern "C" mqd_t mq_open (const char *name, int oflag, ...) { @@ -517,19 +542,7 @@ mq_open (const char *name, int oflag, ...) msghdr->msg_next = 0; /* end of free list */ /* Initialize mutex & condition variables */ - i = ipc_mutex_init (&mqinfo->mqi_lock, mqhdr->mqh_uname); - if (i != 0) - { - set_errno (i); - __leave; - } - i = ipc_cond_init (&mqinfo->mqi_waitsend, mqhdr->mqh_uname, 'S'); - if (i != 0) - { - set_errno (i); - __leave; - } - i = ipc_cond_init (&mqinfo->mqi_waitrecv, mqhdr->mqh_uname, 'R'); + i = _mq_ipc_init (mqinfo, mqhdr->mqh_uname); if (i != 0) { set_errno (i); @@ -598,19 +611,7 @@ mq_open (const char *name, int oflag, ...) mqinfo->mqi_flags = nonblock; /* Initialize mutex & condition variable */ - i = ipc_mutex_init (&mqinfo->mqi_lock, mqhdr->mqh_uname); - if (i != 0) - { - set_errno (i); - __leave; - } - i = ipc_cond_init (&mqinfo->mqi_waitsend, mqhdr->mqh_uname, 'S'); - if (i != 0) - { - set_errno (i); - __leave; - } - i = ipc_cond_init (&mqinfo->mqi_waitrecv, mqhdr->mqh_uname, 'R'); + i = _mq_ipc_init (mqinfo, mqhdr->mqh_uname); if (i != 0) { set_errno (i);