slyphon-zookeeper 0.3.0-java → 0.8.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/ext/zookeeper_c.c CHANGED
@@ -2,6 +2,7 @@
2
2
  * Phillip Pearson <pp@myelin.co.nz>
3
3
  * Eric Maland <eric@twitter.com>
4
4
  * Brian Wickman <wickman@twitter.com>
5
+ * Jonathan D. Simms <slyphon@gmail.com>
5
6
  *
6
7
  * This fork is a 90% rewrite of the original. It takes a more evented
7
8
  * approach to isolate the ZK state machine from the ruby interpreter via an
@@ -108,6 +109,7 @@ static int zkrb_dup(int orig) {
108
109
  return fd;
109
110
  }
110
111
 
112
+ #if 0
111
113
  static VALUE create_selectable_io(zkrb_queue_t *q) {
112
114
  // rb_cIO is the ruby IO class?
113
115
 
@@ -127,8 +129,11 @@ static VALUE create_selectable_io(zkrb_queue_t *q) {
127
129
 
128
130
  return reader;
129
131
  }
132
+ #endif
130
133
 
131
- static VALUE method_init(int argc, VALUE* argv, VALUE self) {
134
+ #define session_timeout_msec(self) rb_iv_get(self, "@_session_timeout_msec")
135
+
136
+ static VALUE method_zkrb_init(int argc, VALUE* argv, VALUE self) {
132
137
  VALUE hostPort;
133
138
  VALUE options;
134
139
 
@@ -157,6 +162,9 @@ static VALUE method_init(int argc, VALUE* argv, VALUE self) {
157
162
  data = Data_Make_Struct(Zookeeper, struct zkrb_instance_data, 0, free_zkrb_instance_data, zk_local_ctx);
158
163
  zk_local_ctx->queue = zkrb_queue_alloc();
159
164
 
165
+ if (zk_local_ctx->queue == NULL)
166
+ rb_raise(rb_eRuntimeError, "could not allocate zkrb queue!");
167
+
160
168
  zoo_deterministic_conn_order(0);
161
169
 
162
170
  zkrb_calling_context *ctx =
@@ -168,7 +176,7 @@ static VALUE method_init(int argc, VALUE* argv, VALUE self) {
168
176
  zookeeper_init(
169
177
  RSTRING_PTR(hostPort),
170
178
  zkrb_state_callback,
171
- 10000,
179
+ session_timeout_msec(self),
172
180
  &zk_local_ctx->myid,
173
181
  ctx,
174
182
  0);
@@ -179,10 +187,9 @@ static VALUE method_init(int argc, VALUE* argv, VALUE self) {
179
187
  }
180
188
 
181
189
  rb_iv_set(self, "@_data", data);
182
- rb_iv_set(self, "@selectable_io", create_selectable_io(zk_local_ctx->queue));
183
- rb_iv_set(self, "@_running", Qtrue);
184
-
190
+ rb_funcall(self, rb_intern("zkc_set_running_and_notify!"), 0);
185
191
 
192
+ error:
186
193
  return Qnil;
187
194
  }
188
195
 
@@ -282,6 +289,19 @@ static VALUE method_exists(VALUE self, VALUE reqid, VALUE path, VALUE async, VAL
282
289
  return output;
283
290
  }
284
291
 
292
+ // this method is *only* called asynchronously
293
+ static VALUE method_sync(VALUE self, VALUE reqid, VALUE path) {
294
+ VALUE async = Qtrue;
295
+ VALUE watch = Qfalse;
296
+ int rc;
297
+
298
+ STANDARD_PREAMBLE(self, zk, reqid, path, async, watch, data_ctx, watch_ctx, call_type);
299
+
300
+ rc = zoo_async(zk->zh, RSTRING_PTR(path), zkrb_string_callback, data_ctx);
301
+
302
+ return INT2FIX(rc);
303
+ }
304
+
285
305
  static VALUE method_create(VALUE self, VALUE reqid, VALUE path, VALUE data, VALUE async, VALUE acls, VALUE flags) {
286
306
  VALUE watch = Qfalse;
287
307
  STANDARD_PREAMBLE(self, zk, reqid, path, async, watch, data_ctx, watch_ctx, call_type);
@@ -477,46 +497,39 @@ static VALUE method_get_acl(VALUE self, VALUE reqid, VALUE path, VALUE async) {
477
497
  return output;
478
498
  }
479
499
 
480
- static int is_running(VALUE self) {
481
- VALUE rval = rb_iv_get(self, "@_running");
482
- return RTEST(rval);
483
- }
484
-
485
- static int is_closed(VALUE self) {
486
- VALUE rval = rb_iv_get(self, "@_closed");
487
- return RTEST(rval);
488
- }
489
-
490
- /* slyphon: NEED TO PROTECT THIS AGAINST SHUTDOWN */
500
+ #define is_running(self) RTEST(rb_iv_get(self, "@_running"))
501
+ #define is_closed(self) RTEST(rb_iv_get(self, "@_closed"))
502
+ #define is_shutting_down(self) RTEST(rb_iv_get(self, "@_shutting_down"))
491
503
 
492
504
  static VALUE method_get_next_event(VALUE self, VALUE blocking) {
505
+ // dbg.h
506
+ check_debug(!is_closed(self), "we are closed, not trying to get event");
507
+
493
508
  char buf[64];
494
509
  FETCH_DATA_PTR(self, zk);
495
510
 
496
511
  for (;;) {
497
-
498
- // we use the is_running(self) method here because it allows us to have a
499
- // ruby-land semaphore that we can also use in the java extension
500
- //
501
- if (is_closed(self) || !is_running(self)) {
502
- zkrb_debug_inst(self, "is_closed(self): %d, is_running(self): %d, method_get_next_event is exiting loop", is_closed(self), is_running(self));
503
- return Qnil; // this case for shutdown
504
- }
512
+ check_debug(!is_closed(self), "we're closed in the middle of method_get_next_event, bailing");
505
513
 
506
514
  zkrb_event_t *event = zkrb_dequeue(zk->queue, 1);
507
515
 
508
516
  /* Wait for an event using rb_thread_select() on the queue's pipe */
509
517
  if (event == NULL) {
510
518
  if (NIL_P(blocking) || (blocking == Qfalse)) {
511
- return Qnil; // no event for us
519
+ goto error;
512
520
  }
513
521
  else {
522
+ // if we're shutting down, don't enter this section, we don't want to block
523
+ check_debug(!is_shutting_down(self), "method_get_next_event, we're shutting down, don't enter blocking section");
524
+
514
525
  int fd = zk->queue->pipe_read;
515
526
  ssize_t bytes_read = 0;
516
527
 
517
528
  // wait for an fd to become readable, opposite of rb_thread_fd_writable
518
529
  rb_thread_wait_fd(fd);
519
530
 
531
+ // clear all bytes here, we'll catch all the events on subsequent calls
532
+ // (until we run out of events)
520
533
  bytes_read = read(fd, buf, sizeof(buf));
521
534
 
522
535
  if (bytes_read == -1) {
@@ -533,6 +546,9 @@ static VALUE method_get_next_event(VALUE self, VALUE blocking) {
533
546
  zkrb_event_free(event);
534
547
  return hash;
535
548
  }
549
+
550
+ error:
551
+ return Qnil;
536
552
  }
537
553
 
538
554
  static VALUE method_has_events(VALUE self) {
@@ -554,15 +570,6 @@ static VALUE method_wake_event_loop_bang(VALUE self) {
554
570
  return Qnil;
555
571
  };
556
572
 
557
- // static VALUE method_signal_pending_close(VALUE self) {
558
- // FETCH_DATA_PTR(self, zk);
559
- //
560
- // zk->pending_close = 1;
561
- // zkrb_signal(zk->queue);
562
- //
563
- // return Qnil;
564
- // }
565
-
566
573
  static VALUE method_close_handle(VALUE self) {
567
574
  FETCH_DATA_PTR(self, zk);
568
575
 
@@ -597,7 +604,7 @@ static VALUE method_is_unrecoverable(VALUE self) {
597
604
  return is_unrecoverable(zk->zh) == ZINVALIDSTATE ? Qtrue : Qfalse;
598
605
  }
599
606
 
600
- static VALUE method_state(VALUE self) {
607
+ static VALUE method_zkrb_state(VALUE self) {
601
608
  FETCH_DATA_PTR(self, zk);
602
609
  return INT2NUM(zoo_state(zk->zh));
603
610
  }
@@ -630,7 +637,7 @@ static VALUE method_client_id(VALUE self) {
630
637
  return client_id_obj;
631
638
  }
632
639
 
633
- static VALUE klass_method_set_debug_level(VALUE klass, VALUE level) {
640
+ static VALUE klass_method_zkrb_set_debug_level(VALUE klass, VALUE level) {
634
641
  Check_Type(level, T_FIXNUM);
635
642
  ZKRBDebugging = (FIX2INT(level) == ZOO_LOG_LEVEL_DEBUG);
636
643
  zoo_set_debug_level(FIX2INT(level));
@@ -647,7 +654,8 @@ static void zkrb_define_methods(void) {
647
654
  #define DEFINE_CLASS_METHOD(method, args) { \
648
655
  rb_define_singleton_method(Zookeeper, #method, method_ ## method, args); }
649
656
 
650
- DEFINE_METHOD(init, -1);
657
+ // the number after the method name should be actual arity of C function - 1
658
+ DEFINE_METHOD(zkrb_init, -1);
651
659
  DEFINE_METHOD(get_children, 4);
652
660
  DEFINE_METHOD(exists, 4);
653
661
  DEFINE_METHOD(create, 6);
@@ -661,10 +669,11 @@ static void zkrb_define_methods(void) {
661
669
  DEFINE_METHOD(deterministic_conn_order, 1);
662
670
  DEFINE_METHOD(is_unrecoverable, 0);
663
671
  DEFINE_METHOD(recv_timeout, 1);
664
- DEFINE_METHOD(state, 0);
672
+ DEFINE_METHOD(zkrb_state, 0);
673
+ DEFINE_METHOD(sync, 2);
674
+
665
675
  // TODO
666
676
  // DEFINE_METHOD(add_auth, 3);
667
- // DEFINE_METHOD(async, 1);
668
677
 
669
678
  // methods for the ruby-side event manager
670
679
  DEFINE_METHOD(get_next_event, 1);
@@ -673,11 +682,11 @@ static void zkrb_define_methods(void) {
673
682
  // Make these class methods?
674
683
  DEFINE_METHOD(zerror, 1);
675
684
 
676
- rb_define_singleton_method(Zookeeper, "set_debug_level", klass_method_set_debug_level, 1);
685
+ rb_define_singleton_method(Zookeeper, "set_zkrb_debug_level", klass_method_zkrb_set_debug_level, 1);
677
686
 
678
687
  rb_attr(Zookeeper, rb_intern("selectable_io"), 1, 0, Qtrue);
679
-
680
688
  rb_define_method(Zookeeper, "wake_event_loop!", method_wake_event_loop_bang, 0);
689
+
681
690
  }
682
691
 
683
692
  // class CZookeeper::ClientId
@@ -695,8 +704,10 @@ static VALUE zkrb_client_id_method_initialize(VALUE self) {
695
704
  return Qnil;
696
705
  }
697
706
 
707
+
698
708
  void Init_zookeeper_c() {
699
709
  ZKRBDebugging = 0;
710
+
700
711
  /* initialize Zookeeper class */
701
712
  Zookeeper = rb_define_class("CZookeeper", rb_cObject);
702
713
  zkrb_define_methods();
data/ext/zookeeper_lib.c CHANGED
@@ -6,6 +6,17 @@ This file contains three sets of helpers:
6
6
  - functions for translating between Ruby and C versions of ZK datatypes
7
7
 
8
8
  wickman@twitter.com
9
+
10
+ *********************************************************************************
11
+ *
12
+ * NOTE: be *very careful* in these functions, calling *ANY* ruby interpreter
13
+ * function when you're not in an interpreter thread can hork ruby, trigger a
14
+ * [BUG], corrupt the stack, kill your dog, knock up your daughter, etc. etc.
15
+ *
16
+ *********************************************************************************
17
+
18
+ slyphon@gmail.com
19
+
9
20
  */
10
21
 
11
22
  #include "ruby.h"
@@ -23,104 +34,117 @@ wickman@twitter.com
23
34
 
24
35
  int ZKRBDebugging;
25
36
 
37
+ // XXX(slyphon): need to check these for error, but what to do if they fail?
26
38
  pthread_mutex_t zkrb_q_mutex = PTHREAD_MUTEX_INITIALIZER;
27
39
 
40
+ #define LOG_PTHREAD_ERR(A, M, ...) if (A) { log_err(M, ##__VA_ARGS__); errno=0; }
41
+
42
+ #define GLOBAL_MUTEX_LOCK(F) LOG_PTHREAD_ERR(pthread_mutex_lock(&zkrb_q_mutex), F)
43
+ #define GLOBAL_MUTEX_UNLOCK(F) LOG_PTHREAD_ERR(pthread_mutex_unlock(&zkrb_q_mutex), F)
28
44
 
29
- /********************************************************************************
30
- *
31
- * NOTE: be *very careful* in these functions, calling *ANY* ruby interpreter
32
- * function when you're not in an interpreter thread can hork ruby, trigger a
33
- * [BUG], corrupt the stack, kill your dog, knock up your daughter, etc. etc.
34
- *
35
- *********************************************************************************
36
- */
37
45
 
38
- /* push/pop is a misnomer, this is a queue */
39
46
  void zkrb_enqueue(zkrb_queue_t *q, zkrb_event_t *elt) {
40
- pthread_mutex_lock(&zkrb_q_mutex);
41
- if (q == NULL || q->tail == NULL) {
42
- pthread_mutex_unlock(&zkrb_q_mutex);
43
- return;
44
- }
47
+ GLOBAL_MUTEX_LOCK("zkrb_enqueue");
48
+
49
+ check_debug(q != NULL && q->tail != NULL, "zkrb_enqueue: queue ptr or tail was NULL\n");
50
+
45
51
  q->tail->event = elt;
46
52
  q->tail->next = (struct zkrb_event_ll_t *) malloc(sizeof(struct zkrb_event_ll_t));
47
53
  q->tail = q->tail->next;
48
54
  q->tail->event = NULL;
49
55
  q->tail->next = NULL;
50
56
  ssize_t ret = write(q->pipe_write, "0", 1); /* Wake up Ruby listener */
51
- pthread_mutex_unlock(&zkrb_q_mutex);
52
57
 
53
58
  // XXX(slyphon): can't raise a ruby exception here as we may not be calling
54
59
  // this from a ruby thread. Calling into the interpreter from a non-ruby
55
60
  // thread is bad, mm'kay?
56
61
 
57
- if ((ret == -1)) {
58
- fprintf(stderr, "WARNING: write to queue (%p) pipe failed!\n", q);
59
- }
62
+ check(ret != -1, "write to queue (%p) pipe failed!\n", q);
63
+
64
+ error:
65
+ GLOBAL_MUTEX_UNLOCK("zkrb_enqueue");
60
66
  }
61
67
 
68
+ // NOTE: the zkrb_event_t* returned *is* the same pointer that's part of the
69
+ // queue, the only place this is used is in method_has_events, and it is simply
70
+ // tested for null-ness. it's probably better to make the null-test here and
71
+ // not return the pointer
72
+ //
62
73
  zkrb_event_t * zkrb_peek(zkrb_queue_t *q) {
63
- pthread_mutex_lock(&zkrb_q_mutex);
64
74
  zkrb_event_t *event = NULL;
75
+
76
+ GLOBAL_MUTEX_LOCK("zkrb_peek");
77
+
65
78
  if (q != NULL && q->head != NULL && q->head->event != NULL) {
66
79
  event = q->head->event;
67
80
  }
68
- pthread_mutex_unlock(&zkrb_q_mutex);
81
+
82
+ GLOBAL_MUTEX_UNLOCK("zkrb_peek");
69
83
  return event;
70
84
  }
71
85
 
86
+ #define ZKRB_QUEUE_EMPTY(q) (q == NULL || q->head == NULL || q->head->event == NULL)
87
+
72
88
  zkrb_event_t* zkrb_dequeue(zkrb_queue_t *q, int need_lock) {
89
+ zkrb_event_t *rv = NULL;
90
+
73
91
  if (need_lock)
74
- pthread_mutex_lock(&zkrb_q_mutex);
75
- if (q == NULL || q->head == NULL || q->head->event == NULL) {
76
- if (need_lock)
77
- pthread_mutex_unlock(&zkrb_q_mutex);
78
- return NULL;
79
- } else {
92
+ GLOBAL_MUTEX_LOCK("zkrb_dequeue");
93
+
94
+ if (!ZKRB_QUEUE_EMPTY(q)) {
80
95
  struct zkrb_event_ll_t *old_root = q->head;
81
96
  q->head = q->head->next;
82
- zkrb_event_t *rv = old_root->event;
97
+ rv = old_root->event;
83
98
  free(old_root);
84
- if (need_lock)
85
- pthread_mutex_unlock(&zkrb_q_mutex);
86
- return rv;
87
99
  }
100
+
101
+ if (need_lock)
102
+ GLOBAL_MUTEX_UNLOCK("zkrb_dequeue");
103
+
104
+ return rv;
88
105
  }
89
106
 
90
107
  void zkrb_signal(zkrb_queue_t *q) {
91
- pthread_mutex_lock(&zkrb_q_mutex);
92
- ssize_t ret = write(q->pipe_write, "0", 1); /* Wake up Ruby listener */
93
- pthread_mutex_unlock(&zkrb_q_mutex);
94
- if (ret == -1)
95
- log_err("write to pipe failed");
108
+ GLOBAL_MUTEX_LOCK("zkrb_signal");
109
+
110
+ if (!write(q->pipe_write, "0", 1)) /* Wake up Ruby listener */
111
+ log_err("zkrb_signal: write to pipe failed, could not wake");
112
+
113
+ GLOBAL_MUTEX_UNLOCK("zkrb_signal");
96
114
  }
97
115
 
98
116
  zkrb_queue_t *zkrb_queue_alloc(void) {
99
- int pfd[2];
117
+ // some of the locking is a little coarse, but it
118
+ // eases the logic of releasing in case of error.
119
+ GLOBAL_MUTEX_LOCK("zkrb_queue_alloc");
100
120
 
101
- // XXX(slyphon): close-on-exec settings?
121
+ int pfd[2];
122
+ zkrb_queue_t *rq = NULL;
123
+
124
+ check(pipe(pfd) == 0, "creating the signal pipe failed");
102
125
 
103
- if (pipe(pfd) == -1)
104
- rb_raise(rb_eRuntimeError, "create of pipe failed: %d", errno);
126
+ rq = malloc(sizeof(zkrb_queue_t));
127
+ check_mem(rq);
105
128
 
106
- pthread_mutex_lock(&zkrb_q_mutex);
107
- zkrb_queue_t *rq = malloc(sizeof(zkrb_queue_t));
108
129
  rq->head = malloc(sizeof(struct zkrb_event_ll_t));
130
+ check_mem(rq->head);
131
+
109
132
  rq->head->event = NULL; rq->head->next = NULL;
110
133
  rq->tail = rq->head;
111
134
  rq->pipe_read = pfd[0];
112
135
  rq->pipe_write = pfd[1];
113
- pthread_mutex_unlock(&zkrb_q_mutex);
114
136
 
137
+ GLOBAL_MUTEX_UNLOCK("zkrb_queue_alloc");
115
138
  return rq;
139
+
140
+ error:
141
+ GLOBAL_MUTEX_UNLOCK("zkrb_queue_alloc");
142
+ return NULL;
116
143
  }
117
144
 
118
145
  void zkrb_queue_free(zkrb_queue_t *queue) {
119
- pthread_mutex_lock(&zkrb_q_mutex);
120
- if (queue == NULL) {
121
- pthread_mutex_unlock(&zkrb_q_mutex);
122
- return;
123
- }
146
+ GLOBAL_MUTEX_LOCK("zkrb_queue_free");
147
+ check_debug(queue != NULL, "zkrb_queue_free: queue was NULL");
124
148
 
125
149
  zkrb_event_t *elt;
126
150
  while ((elt = zkrb_dequeue(queue, 0)) != NULL) {
@@ -130,7 +154,9 @@ void zkrb_queue_free(zkrb_queue_t *queue) {
130
154
  close(queue->pipe_read);
131
155
  close(queue->pipe_write);
132
156
  free(queue);
133
- pthread_mutex_unlock(&zkrb_q_mutex);
157
+
158
+ error:
159
+ GLOBAL_MUTEX_UNLOCK("zkrb_queue_free");
134
160
  }
135
161
 
136
162
  zkrb_event_t *zkrb_event_alloc(void) {
@@ -324,12 +350,10 @@ void zkrb_print_calling_context(zkrb_calling_context *ctx) {
324
350
 
325
351
  void zkrb_state_callback(
326
352
  zhandle_t *zh, int type, int state, const char *path, void *calling_ctx) {
327
- /* logging */
328
- if (ZKRBDebugging) {
329
- fprintf(stderr, "ZOOKEEPER_C_STATE WATCHER "
353
+
354
+ zkrb_debug("ZOOKEEPER_C_STATE WATCHER "
330
355
  "type = %d, state = %d, path = %p, value = %s\n",
331
356
  type, state, (void *) path, path ? path : "NULL");
332
- }
333
357
 
334
358
  /* save callback context */
335
359
  struct zkrb_watcher_completion *wc = malloc(sizeof(struct zkrb_watcher_completion));
@@ -358,11 +382,10 @@ void zkrb_state_callback(
358
382
 
359
383
  void zkrb_data_callback(
360
384
  int rc, const char *value, int value_len, const struct Stat *stat, const void *calling_ctx) {
361
- if (ZKRBDebugging) {
362
- fprintf(stderr, "ZOOKEEPER_C_DATA WATCHER "
363
- "rc = %d (%s), value = %s, len = %d\n",
364
- rc, zerror(rc), value ? value : "NULL", value_len);
365
- }
385
+
386
+ zkrb_debug("ZOOKEEPER_C_DATA WATCHER "
387
+ "rc = %d (%s), value = %s, len = %d\n",
388
+ rc, zerror(rc), value ? value : "NULL", value_len);
366
389
 
367
390
  /* copy data completion */
368
391
  struct zkrb_data_completion *dc = malloc(sizeof(struct zkrb_data_completion));
@@ -388,10 +411,8 @@ void zkrb_data_callback(
388
411
 
389
412
  void zkrb_stat_callback(
390
413
  int rc, const struct Stat *stat, const void *calling_ctx) {
391
- if (ZKRBDebugging) {
392
- fprintf(stderr, "ZOOKEEPER_C_STAT WATCHER "
414
+ zkrb_debug("ZOOKEEPER_C_STAT WATCHER "
393
415
  "rc = %d (%s)\n", rc, zerror(rc));
394
- }
395
416
 
396
417
  struct zkrb_stat_completion *sc = malloc(sizeof(struct zkrb_stat_completion));
397
418
  sc->stat = NULL;
@@ -407,10 +428,9 @@ void zkrb_stat_callback(
407
428
 
408
429
  void zkrb_string_callback(
409
430
  int rc, const char *string, const void *calling_ctx) {
410
- if (ZKRBDebugging) {
411
- fprintf(stderr, "ZOOKEEPER_C_STRING WATCHER "
431
+
432
+ zkrb_debug("ZOOKEEPER_C_STRING WATCHER "
412
433
  "rc = %d (%s)\n", rc, zerror(rc));
413
- }
414
434
 
415
435
  struct zkrb_string_completion *sc = malloc(sizeof(struct zkrb_string_completion));
416
436
  sc->value = NULL;
@@ -427,10 +447,8 @@ void zkrb_string_callback(
427
447
 
428
448
  void zkrb_strings_callback(
429
449
  int rc, const struct String_vector *strings, const void *calling_ctx) {
430
- if (ZKRBDebugging) {
431
- fprintf(stderr, "ZOOKEEPER_C_STRINGS WATCHER "
450
+ zkrb_debug("ZOOKEEPER_C_STRINGS WATCHER "
432
451
  "rc = %d (%s), calling_ctx = %p\n", rc, zerror(rc), calling_ctx);
433
- }
434
452
 
435
453
  /* copy string vector */
436
454
  struct zkrb_strings_completion *sc = malloc(sizeof(struct zkrb_strings_completion));
@@ -446,10 +464,8 @@ void zkrb_strings_callback(
446
464
 
447
465
  void zkrb_strings_stat_callback(
448
466
  int rc, const struct String_vector *strings, const struct Stat *stat, const void *calling_ctx) {
449
- if (ZKRBDebugging) {
450
- fprintf(stderr, "ZOOKEEPER_C_STRINGS_STAT WATCHER "
467
+ zkrb_debug("ZOOKEEPER_C_STRINGS_STAT WATCHER "
451
468
  "rc = %d (%s), calling_ctx = %p\n", rc, zerror(rc), calling_ctx);
452
- }
453
469
 
454
470
  struct zkrb_strings_stat_completion *sc = malloc(sizeof(struct zkrb_strings_stat_completion));
455
471
  sc->stat = NULL;
@@ -465,12 +481,9 @@ void zkrb_strings_stat_callback(
465
481
  zkrb_enqueue(queue, event);
466
482
  }
467
483
 
468
- void zkrb_void_callback(
469
- int rc, const void *calling_ctx) {
470
- if (ZKRBDebugging) {
471
- fprintf(stderr, "ZOOKEEPER_C_VOID WATCHER "
484
+ void zkrb_void_callback(int rc, const void *calling_ctx) {
485
+ zkrb_debug("ZOOKEEPER_C_VOID WATCHER "
472
486
  "rc = %d (%s)\n", rc, zerror(rc));
473
- }
474
487
 
475
488
  ZKH_SETUP_EVENT(queue, event);
476
489
  event->rc = rc;
@@ -482,10 +495,7 @@ void zkrb_void_callback(
482
495
 
483
496
  void zkrb_acl_callback(
484
497
  int rc, struct ACL_vector *acls, struct Stat *stat, const void *calling_ctx) {
485
- if (ZKRBDebugging) {
486
- fprintf(stderr, "ZOOKEEPER_C_ACL WATCHER "
487
- "rc = %d (%s)\n", rc, zerror(rc));
488
- }
498
+ zkrb_debug("ZOOKEEPER_C_ACL WATCHER rc = %d (%s)\n", rc, zerror(rc));
489
499
 
490
500
  struct zkrb_acl_completion *ac = malloc(sizeof(struct zkrb_acl_completion));
491
501
  ac->acl = NULL;
@@ -644,3 +654,5 @@ struct String_vector * zkrb_clone_string_vector(const struct String_vector * src
644
654
  }
645
655
  return dst;
646
656
  }
657
+
658
+ // vim:sts=2:sw=2:et
data/ext/zookeeper_lib.h CHANGED
@@ -105,7 +105,6 @@ void zkrb_queue_free(zkrb_queue_t *queue);
105
105
  zkrb_event_t * zkrb_event_alloc(void);
106
106
  void zkrb_event_free(zkrb_event_t *ptr);
107
107
 
108
- /* push/pop is a misnomer, this is a queue */
109
108
  void zkrb_enqueue(zkrb_queue_t *queue, zkrb_event_t *elt);
110
109
  zkrb_event_t * zkrb_peek(zkrb_queue_t *queue);
111
110
  zkrb_event_t * zkrb_dequeue(zkrb_queue_t *queue, int need_lock);