diff options
author | Anand Avati <avati@redhat.com> | 2013-12-03 16:30:45 -0800 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-01-13 21:44:19 -0800 |
commit | aa3b01533efcd85fc1e654ac14a03ab8e1d5bbab (patch) | |
tree | ee2640323d45c3822ffba89685e9da42d253e6cd /xlators/features/locks/src/clear.c | |
parent | ce86c132347f0a788ab50ffbd6795a2eb982074e (diff) |
locks: various fixes
- implement ref/unref of entry locks (and fix bad pointer deref crashes)
- code cleanup and deleted various data types
- fix improper read/write lock conflict detection in entrylk
- fix indefinite hang of blocked locks on disconnect
- register locks in client_t synchronously, fix crashes in disconnect path
Change-Id: Id273690c9111b8052139d1847060d1fb5a711924
BUG: 849630
Signed-off-by: Anand Avati <avati@redhat.com>
Reviewed-on: http://review.gluster.org/6638
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/features/locks/src/clear.c')
-rw-r--r-- | xlators/features/locks/src/clear.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/xlators/features/locks/src/clear.c b/xlators/features/locks/src/clear.c index 124b9ad0feb..75593b8988c 100644 --- a/xlators/features/locks/src/clear.c +++ b/xlators/features/locks/src/clear.c @@ -338,9 +338,8 @@ blkd: elock->basename, ENTRYLK_LOCK, elock->type, -1, EAGAIN); STACK_UNWIND_STRICT (entrylk, elock->frame, -1, EAGAIN, NULL); - GF_FREE ((char *) elock->basename); - GF_FREE (elock->connection_id); - GF_FREE (elock); + + __pl_entrylk_unref (elock); } if (!(args->kind & CLRLK_GRANTED)) { @@ -363,13 +362,13 @@ granted: gcount++; list_del_init (&elock->domain_list); list_add_tail (&elock->domain_list, &removed); + + __pl_entrylk_unref (elock); } } pthread_mutex_unlock (&pl_inode->mutex); - list_for_each_entry_safe (elock, tmp, &removed, domain_list) { - grant_blocked_entry_locks (this, pl_inode, elock, dom); - } + grant_blocked_entry_locks (this, pl_inode, dom); ret = 0; out: |