This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.21-163-g1cdf2ea


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  1cdf2ea1fa44bae7d400b602399e30d490173bf3 (commit)
      from  1597b7447a81f372068b68a7830ac83aa3b4527f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=1cdf2ea1fa44bae7d400b602399e30d490173bf3

commit 1cdf2ea1fa44bae7d400b602399e30d490173bf3
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date:   Fri Mar 6 11:32:24 2015 +0100

    Fix aio_error thread-safety.
    
    * sysdeps/pthread/aio_error.c: New file
    * sysdeps/pthread/aio_misc.c: Remove optimistic comment about
    synchronization.

diff --git a/ChangeLog b/ChangeLog
index c422a37..420f351 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2015-03-06  Samuel Thibault  <samuel.thibault@inria.fr>
+
+	Fix aio_error thread-safety.
+
+	* sysdeps/pthread/aio_error.c: New file
+	* sysdeps/pthread/aio_misc.c: Remove optimistic comment about
+	synchronization.
+
 2015-03-06  Florian Weimer  <fweimer@redhat.com>
 
 	* stdio-common/vfprintf.c (THOUSANDS_SEP_T): New typedef.
diff --git a/sysdeps/pthread/aio_error.c b/sysdeps/pthread/aio_error.c
new file mode 100644
index 0000000..ebe1378
--- /dev/null
+++ b/sysdeps/pthread/aio_error.c
@@ -0,0 +1,49 @@
+/* Return error status of asynchronous I/O request.
+   Copyright (C) 1997-2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+
+/* We use an UGLY hack to prevent gcc from finding us cheating.  The
+   implementation of aio_error and aio_error64 are identical and so
+   we want to avoid code duplication by using aliases.  But gcc sees
+   the different parameter lists and prints a warning.  We define here
+   a function so that aio_error64 has no prototype.  */
+#define aio_error64 XXX
+#include <aio.h>
+/* And undo the hack.  */
+#undef aio_error64
+
+#include <aio_misc.h>
+
+
+int
+aio_error (aiocbp)
+     const struct aiocb *aiocbp;
+{
+  int ret;
+
+  /* Acquire the mutex to make sure all operations for this request are
+     complete.  */
+  pthread_mutex_lock(&__aio_requests_mutex);
+  ret = aiocbp->__error_code;
+  pthread_mutex_unlock(&__aio_requests_mutex);
+
+  return ret;
+}
+
+weak_alias (aio_error, aio_error64)
diff --git a/sysdeps/pthread/aio_misc.c b/sysdeps/pthread/aio_misc.c
index 5d2b81e..83a6cb9 100644
--- a/sysdeps/pthread/aio_misc.c
+++ b/sysdeps/pthread/aio_misc.c
@@ -593,14 +593,6 @@ handle_fildes_io (void *arg)
 	  /* Get the mutex.  */
 	  pthread_mutex_lock (&__aio_requests_mutex);
 
-	  /* In theory we would need here a write memory barrier since the
-	     callers test using aio_error() whether the request finished
-	     and once this value != EINPROGRESS the field __return_value
-	     must be committed to memory.
-
-	     But since the pthread_mutex_lock call involves write memory
-	     barriers as well it is not necessary.  */
-
 	  if (aiocbp->aiocb.__return_value == -1)
 	    aiocbp->aiocb.__error_code = errno;
 	  else

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                           |    8 ++++++++
 {rt => sysdeps/pthread}/aio_error.c |   12 +++++++++++-
 sysdeps/pthread/aio_misc.c          |    8 --------
 3 files changed, 19 insertions(+), 9 deletions(-)
 copy {rt => sysdeps/pthread}/aio_error.c (84%)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]