The branch, master has been updated
       via  275d9fc tdb: Fix mutexes on FreeBSD
       via  5ce95ab tdb: Only mmap the mutex area if not already mmap'ed
       via  a2843cf tdb: NULL out tdb->mutexes in tdb_mutex_munmap
      from  bdc049d ctdb-common: Drop CTDB's copy of sys_read() and sys_write()

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 275d9fc7d943048c5e580e656b6ad85b8fc6cc14
Author: Volker Lendecke <v...@samba.org>
Date:   Mon Nov 21 21:00:01 2016 +0100

    tdb: Fix mutexes on FreeBSD
    
    susv4 on mmap has the following snippet:
    
    > The state of synchronization objects such as mutexes, semaphores,
    > barriers, and conditional variables placed in shared memory mapped
    > with MAP_SHARED becomes undefined when the last region in any process
    > containing the synchronization object is unmapped.
    
    This means we can't keep the mutex mmap area unmapped at any point
    in time.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=12455
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Tue Nov 29 23:59:52 CET 2016 on sn-devel-144

commit 5ce95abf37d5646dd5a6ed9acc018f0ab5d1023c
Author: Volker Lendecke <v...@samba.org>
Date:   Mon Nov 21 20:58:08 2016 +0100

    tdb: Only mmap the mutex area if not already mmap'ed
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=12455
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit a2843cfd4dca32ccb9e97f20a9119f131db3b9d1
Author: Volker Lendecke <v...@samba.org>
Date:   Mon Nov 21 20:56:55 2016 +0100

    tdb: NULL out tdb->mutexes in tdb_mutex_munmap
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=12455
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

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

Summary of changes:
 lib/tdb/common/mutex.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/tdb/common/mutex.c b/lib/tdb/common/mutex.c
index 280dec1..cac3916 100644
--- a/lib/tdb/common/mutex.c
+++ b/lib/tdb/common/mutex.c
@@ -603,12 +603,13 @@ int tdb_mutex_init(struct tdb_context *tdb)
 fail:
        pthread_mutexattr_destroy(&ma);
 fail_munmap:
-       tdb_mutex_munmap(tdb);
 
        if (ret == 0) {
                return 0;
        }
 
+       tdb_mutex_munmap(tdb);
+
        errno = ret;
        return -1;
 }
@@ -623,6 +624,10 @@ int tdb_mutex_mmap(struct tdb_context *tdb)
                return 0;
        }
 
+       if (tdb->mutexes != NULL) {
+               return 0;
+       }
+
        ptr = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_FILE,
                   tdb->fd, 0);
        if (ptr == MAP_FAILED) {
@@ -636,13 +641,20 @@ int tdb_mutex_mmap(struct tdb_context *tdb)
 int tdb_mutex_munmap(struct tdb_context *tdb)
 {
        size_t len;
+       int ret;
 
        len = tdb_mutex_size(tdb);
        if (len == 0) {
                return 0;
        }
 
-       return munmap(tdb->mutexes, len);
+       ret = munmap(tdb->mutexes, len);
+       if (ret == -1) {
+               return -1;
+       }
+       tdb->mutexes = NULL;
+
+       return 0;
 }
 
 static bool tdb_mutex_locking_cached;


-- 
Samba Shared Repository

Reply via email to