diff options
Diffstat (limited to 'debian/patches/flavio0001-Use-refcount_t-for-peropen-reference-counting-in-lib.patch')
-rw-r--r-- | debian/patches/flavio0001-Use-refcount_t-for-peropen-reference-counting-in-lib.patch | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/debian/patches/flavio0001-Use-refcount_t-for-peropen-reference-counting-in-lib.patch b/debian/patches/flavio0001-Use-refcount_t-for-peropen-reference-counting-in-lib.patch deleted file mode 100644 index f1842e7e..00000000 --- a/debian/patches/flavio0001-Use-refcount_t-for-peropen-reference-counting-in-lib.patch +++ /dev/null @@ -1,167 +0,0 @@ -From afea5285b0e40b68f97b47f0f0edc471b554fb34 Mon Sep 17 00:00:00 2001 -From: Flavio Cruz <flaviocruz@gmail.com> -Date: Sun, 7 Feb 2016 01:33:00 -0500 -Subject: [PATCH hurd 1/2] Use refcount_t for peropen reference counting in - libnetfs. - -* libnetfs/netfs.h: Use refcount_t. -* libnetfs/make-peropen.c: Initialize to 1 with refcount_init just like in libdiskfs. -* libnetfs/make-protid.c: Don't increment the count here. Do it like libdiskfs. -* libnetfs/io-duplicate.c: Add refcount_ref since netfs_make_protid no longer increments the refcount. -* libnetfs/io-reauthenticate.c: Likewise. -* libnetfs/io-restrict-auth.c: Likewise. -* libnetfs/release-peropen.c: Dereference without locking. ---- - libnetfs/io-duplicate.c | 1 + - libnetfs/io-reauthenticate.c | 2 ++ - libnetfs/io-restrict-auth.c | 2 ++ - libnetfs/make-peropen.c | 2 +- - libnetfs/make-protid.c | 1 - - libnetfs/netfs.h | 2 +- - libnetfs/release-peropen.c | 38 ++++++++++++++++++-------------------- - 7 files changed, 25 insertions(+), 23 deletions(-) - -diff --git a/libnetfs/io-duplicate.c b/libnetfs/io-duplicate.c -index b2c3a3a..263f9e8 100644 ---- a/libnetfs/io-duplicate.c -+++ b/libnetfs/io-duplicate.c -@@ -34,6 +34,7 @@ netfs_S_io_duplicate (struct protid *user, - if (err) - return err; - -+ refcount_ref (&user->po->refcnt); - pthread_mutex_lock (&user->po->np->lock); - newpi = netfs_make_protid (user->po, clone); - *newport = ports_get_right (newpi); -diff --git a/libnetfs/io-reauthenticate.c b/libnetfs/io-reauthenticate.c -index 8ff4182..b2d4a44 100644 ---- a/libnetfs/io-reauthenticate.c -+++ b/libnetfs/io-reauthenticate.c -@@ -34,12 +34,14 @@ netfs_S_io_reauthenticate (struct protid *user, mach_port_t rend_port) - /* This routine must carefully ignore EINTR because we - are a simpleroutine, so callers won't know to restart. */ - -+ refcount_ref (&user->po->refcnt); - pthread_mutex_lock (&user->po->np->lock); - do - newpi = netfs_make_protid (user->po, 0); - while (! newpi && errno == EINTR); - if (! newpi) - { -+ refcount_deref (&user->po->refcnt); - pthread_mutex_unlock (&user->po->np->lock); - return errno; - } -diff --git a/libnetfs/io-restrict-auth.c b/libnetfs/io-restrict-auth.c -index 0c3403d..79b7d09 100644 ---- a/libnetfs/io-restrict-auth.c -+++ b/libnetfs/io-restrict-auth.c -@@ -43,6 +43,7 @@ netfs_S_io_restrict_auth (struct protid *user, - return err; - - pthread_mutex_lock (&user->po->np->lock); -+ refcount_ref (&user->po->refcnt); - newpi = netfs_make_protid (user->po, new_user); - if (newpi) - { -@@ -52,6 +53,7 @@ netfs_S_io_restrict_auth (struct protid *user, - } - else - { -+ refcount_deref (&user->po->refcnt); - pthread_mutex_unlock (&user->po->np->lock); - iohelp_free_iouser (new_user); - err = ENOMEM; -diff --git a/libnetfs/make-peropen.c b/libnetfs/make-peropen.c -index f7be58b..413e914 100644 ---- a/libnetfs/make-peropen.c -+++ b/libnetfs/make-peropen.c -@@ -31,7 +31,7 @@ netfs_make_peropen (struct node *np, int flags, struct peropen *context) - - po->filepointer = 0; - po->lock_status = LOCK_UN; -- po->refcnt = 0; -+ refcount_init (&po->refcnt, 1); - po->openstat = flags; - po->np = np; - po->path = NULL; -diff --git a/libnetfs/make-protid.c b/libnetfs/make-protid.c -index bf18283..995ac1e 100644 ---- a/libnetfs/make-protid.c -+++ b/libnetfs/make-protid.c -@@ -36,7 +36,6 @@ netfs_make_protid (struct peropen *po, struct iouser *cred) - if (errno) - return 0; - -- po->refcnt++; - pi->po = po; - pi->user = cred; - pi->shared_object = MACH_PORT_NULL; -diff --git a/libnetfs/netfs.h b/libnetfs/netfs.h -index fbe2c60..3f94ccd 100644 ---- a/libnetfs/netfs.h -+++ b/libnetfs/netfs.h -@@ -51,7 +51,7 @@ struct peropen - { - loff_t filepointer; - int lock_status; -- int refcnt; -+ refcount_t refcnt; - int openstat; - - struct node *np; -diff --git a/libnetfs/release-peropen.c b/libnetfs/release-peropen.c -index c206b43..01af97d 100644 ---- a/libnetfs/release-peropen.c -+++ b/libnetfs/release-peropen.c -@@ -24,29 +24,27 @@ - void - netfs_release_peropen (struct peropen *po) - { -+ if (refcount_deref (&po->refcnt) > 0) -+ return; -+ - pthread_mutex_lock (&po->np->lock); -- if (--po->refcnt) -- pthread_mutex_unlock (&po->np->lock); -- else -- { -- if (po->root_parent) -- mach_port_deallocate (mach_task_self (), po->root_parent); -+ if (po->root_parent) -+ mach_port_deallocate (mach_task_self (), po->root_parent); - -- if (po->shadow_root && po->shadow_root != po->np) -- { -- pthread_mutex_lock (&po->shadow_root->lock); -- netfs_nput (po->shadow_root); -- } -- if (po->shadow_root_parent) -- mach_port_deallocate (mach_task_self (), po->shadow_root_parent); -+ if (po->shadow_root && po->shadow_root != po->np) -+ { -+ pthread_mutex_lock (&po->shadow_root->lock); -+ netfs_nput (po->shadow_root); -+ } -+ if (po->shadow_root_parent) -+ mach_port_deallocate (mach_task_self (), po->shadow_root_parent); - -- if (po->lock_status != LOCK_UN) -- fshelp_acquire_lock (&po->np->userlock, &po->lock_status, -- &po->np->lock, LOCK_UN); -+ if (po->lock_status != LOCK_UN) -+ fshelp_acquire_lock (&po->np->userlock, &po->lock_status, -+ &po->np->lock, LOCK_UN); - -- netfs_nput (po->np); -+ netfs_nput (po->np); - -- free (po->path); -- free (po); -- } -+ free (po->path); -+ free (po); - } --- -2.1.4 - |