This is an automated email from the ASF dual-hosted git repository.

symat pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zookeeper.git


The following commit(s) were added to refs/heads/master by this push:
     new 6b222fb  ZOOKEEPER-3954: C client: GCC 10 compilation fixes
6b222fb is described below

commit 6b222fbca9da8795bbf71c7533e5da220831fe92
Author: Damien Diederen <[email protected]>
AuthorDate: Mon Oct 12 06:40:18 2020 +0000

    ZOOKEEPER-3954: C client: GCC 10 compilation fixes
    
    The in this PR avoids a confusing and scary compilation issue [encountered 
by Michael Hudson-Doyle](https://issues.apache.org/jira/browse/ZOOKEEPER-3954) 
when building the C client with GCC 10 and "aggressive" optimization settings:
    
    > `free_auth_completions` is being inlined into `free_completions`, and 
this lets gcc see that members of `a_list` are being accessed without 
initialization
    
    This is (fortunately!) a red herring: what GCC doesn't see is that, in 
practice, `zoo_lock_auth` always returns zero, and that `a_list` is always 
initialized in the conditional block which follows it.
    
    That issue is easily "fixed" by removing the `if`.  The rest of the client 
code doesn't check `zoo_lock_auth`'s return value--and we have bigger issues if 
unconditional locks start failing anyway.
    
    See also https://github.com/apache/zookeeper/pull/1481 and 
https://github.com/apache/zookeeper/pull/1486.
    
    Author: Damien Diederen <[email protected]>
    
    Reviewers: Enrico Olivelli <[email protected]>, Mate Szalay-Beko 
<[email protected]>
    
    Closes #1487 from ztzg/ZOOKEEPER-3954-gcc10-compilation-fixes-master
---
 .../zookeeper-client-c/src/zookeeper.c             | 28 +++++++++++-----------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/zookeeper-client/zookeeper-client-c/src/zookeeper.c 
b/zookeeper-client/zookeeper-client-c/src/zookeeper.c
index 1728c0e..1327816 100644
--- a/zookeeper-client/zookeeper-client-c/src/zookeeper.c
+++ b/zookeeper-client/zookeeper-client-c/src/zookeeper.c
@@ -1927,23 +1927,23 @@ void free_completions(zhandle_t *zh,int 
callCompletion,int reason)
             }
         }
     }
-    if (zoo_lock_auth(zh) == 0) {
-        a_list.completion = NULL;
-        a_list.next = NULL;
 
-        get_auth_completions(&zh->auth_h, &a_list);
-        zoo_unlock_auth(zh);
+    zoo_lock_auth(zh);
+    a_list.completion = NULL;
+    a_list.next = NULL;
+    get_auth_completions(&zh->auth_h, &a_list);
+    zoo_unlock_auth(zh);
 
-        a_tmp = &a_list;
-        // chain call user's completion function
-        while (a_tmp->completion != NULL) {
-            auth_completion = a_tmp->completion;
-            auth_completion(reason, a_tmp->auth_data);
-            a_tmp = a_tmp->next;
-            if (a_tmp == NULL)
-                break;
-        }
+    a_tmp = &a_list;
+    // chain call user's completion function
+    while (a_tmp->completion != NULL) {
+        auth_completion = a_tmp->completion;
+        auth_completion(reason, a_tmp->auth_data);
+        a_tmp = a_tmp->next;
+        if (a_tmp == NULL)
+            break;
     }
+
     free_auth_completion(&a_list);
 }
 

Reply via email to