Browse Source

ZOOKEEPER-495. c client logs an invalid error when zookeeper_init is called with chroot (phunt via mahadev)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/zookeeper/trunk@903063 13f79535-47bb-0310-9956-ffa450edef68
Mahadev Konar 15 years ago
parent
commit
acab74c55c
4 changed files with 9 additions and 4 deletions
  1. 3 0
      CHANGES.txt
  2. 1 1
      src/c/src/zk_adaptor.h
  3. 3 1
      src/c/src/zk_hashtable.c
  4. 2 2
      src/c/src/zookeeper.c

+ 3 - 0
CHANGES.txt

@@ -212,6 +212,9 @@ BUGFIXES:
   ZOOKEEPER-413. two flaws need addressing in the c tests that can cause false
   positive failures (phunt via mahadev)
 
+  ZOOKEEPER-495. c client logs an invalid error when zookeeper_init is called
+  with chroot (phunt via mahadev)
+
 IMPROVEMENTS:
   ZOOKEEPER-473. cleanup junit tests to eliminate false positives due to
   "socket reuse" and failure to close client (phunt via mahadev)

+ 1 - 1
src/c/src/zk_adaptor.h

@@ -229,7 +229,7 @@ int process_async(int outstanding_sync);
 void process_completions(zhandle_t *zh);
 int flush_send_queue(zhandle_t*zh, int timeout);
 char* sub_string(zhandle_t *zh, const char* server_path);
-void free_duplicate_path(char* free_path, const char* path);
+void free_duplicate_path(const char* free_path, const char* path);
 void zoo_lock_auth(zhandle_t *zh);
 void zoo_unlock_auth(zhandle_t *zh);
 

+ 3 - 1
src/c/src/zk_hashtable.c

@@ -268,7 +268,9 @@ static void add_for_event(zk_hashtable *ht, char *path, watcher_object_list_t **
 static void do_foreach_watcher(watcher_object_t* wo,zhandle_t* zh,
         const char* path,int type,int state)
 {
-    char *client_path = sub_string(zh, path);
+    // session event's don't have paths
+    const char *client_path =
+        (type != ZOO_SESSION_EVENT ? sub_string(zh, path) : path);
     while(wo!=0){
         wo->watcher(zh,type,state,client_path,wo->context);
         wo=wo->next;

+ 2 - 2
src/c/src/zookeeper.c

@@ -713,9 +713,9 @@ abort:
  * deallocated the free_path only its beeen allocated
  * and not equal to path
  */
-void free_duplicate_path(char *free_path, const char* path) {
+void free_duplicate_path(const char *free_path, const char* path) {
     if (free_path != path) {
-        free(free_path);
+        free((void*)free_path);
     }
 }