line |
true |
false |
branch |
106
|
0 |
203 |
DEBUG_MSG("flags = %x", e->flags); |
113
|
0 |
0 |
DEBUG_MSG("flags = %x", e->flags); |
120
|
0 |
136 |
DEBUG_MSG("flags = %x", e->flags); |
127
|
0 |
136 |
DEBUG_MSG("flags = %x", e->flags); |
139
|
68 |
0 |
if (ac->ev.data != NULL) |
168
|
55239 |
0 |
if(self==NULL) return WAIT_FOR_EVENT_EXCEPTION; |
169
|
55239 |
0 |
if(self->ac==NULL) return WAIT_FOR_EVENT_EXCEPTION; |
174
|
55239 |
0 |
if(e==NULL) return 0; |
176
|
68 |
55171 |
if((e->flags & (WAIT_FOR_READ|WAIT_FOR_WRITE)) == (WAIT_FOR_READ|WAIT_FOR_WRITE)) { |
177
|
0 |
68 |
DEBUG_MSG("set READ and WRITE, compare read_timeout = %f and write_timeout = %f", |
179
|
66 |
2 |
if(read_timeout < 0 && write_timeout < 0) { |
|
0 |
66 |
if(read_timeout < 0 && write_timeout < 0) { |
182
|
2 |
0 |
} else if(read_timeout < 0) { |
185
|
0 |
2 |
} else if(write_timeout < 0) { |
188
|
0 |
0 |
} else if(read_timeout < write_timeout) { |
195
|
68 |
55103 |
} else if(e->flags & WAIT_FOR_READ) { |
196
|
68 |
0 |
DEBUG_MSG("set READ, read_timeout = %f", read_timeout); |
199
|
0 |
55103 |
} else if(e->flags & WAIT_FOR_WRITE) { |
200
|
55103 |
0 |
DEBUG_MSG("set WRITE, write_timeout = %f", write_timeout); |
206
|
4 |
55235 |
if (timeout < 0) { |
211
|
0 |
55239 |
DEBUG_MSG("select start, timeout is %f", timeout); |
215
|
136 |
55103 |
if(e->flags & WAIT_FOR_READ) { pollfd.events |= POLLIN; } |
216
|
55171 |
68 |
if(e->flags & WAIT_FOR_WRITE) { pollfd.events |= POLLOUT; } |
218
|
0 |
55239 |
DEBUG_MSG("poll returns %d", rc); |
219
|
1 |
55238 |
if(rc == 0) { |
220
|
0 |
1 |
DEBUG_MSG("%s", "timeout"); |
224
|
0 |
55238 |
if(rc < 0) { |
225
|
0 |
0 |
DEBUG_MSG("exception: %s", strerror(errno)); |
226
|
0 |
0 |
if( errno == EINTR ) { |
227
|
0 |
0 |
PERL_ASYNC_CHECK(); |
228
|
0 |
0 |
DEBUG_MSG("%s", "recieved interrupt. retry wait_for_event"); |
233
|
55238 |
0 |
if(self->ac && (pollfd.revents & POLLIN) != 0) { |
|
67 |
55171 |
if(self->ac && (pollfd.revents & POLLIN) != 0) { |
234
|
0 |
67 |
DEBUG_MSG("ready to %s", "read"); |
237
|
55232 |
6 |
if(self->ac && (pollfd.revents & (POLLOUT|POLLHUP)) != 0) { |
|
55171 |
61 |
if(self->ac && (pollfd.revents & (POLLOUT|POLLHUP)) != 0) { |
238
|
0 |
55171 |
DEBUG_MSG("ready to %s", "write"); |
241
|
0 |
55238 |
if((pollfd.revents & (POLLERR|POLLNVAL)) != 0) { |
242
|
0 |
0 |
DEBUG_MSG( |
|
0 |
0 |
DEBUG_MSG( |
|
0 |
0 |
DEBUG_MSG( |
249
|
0 |
55238 |
DEBUG_MSG("%s", "finish"); |
255
|
0 |
130 |
DEBUG_MSG("%s", "start"); |
256
|
197 |
68 |
while(self->ac && self->ac->replies.tail) { |
|
136 |
61 |
while(self->ac && self->ac->replies.tail) { |
258
|
135 |
1 |
if (res != WAIT_FOR_EVENT_OK) { |
259
|
0 |
1 |
DEBUG_MSG("error: %d", res); |
263
|
0 |
129 |
DEBUG_MSG("%s", "finish"); |
270
|
0 |
68 |
DEBUG_MSG("connected status = %d", status); |
271
|
0 |
68 |
if(status != REDIS_OK) { |
283
|
0 |
68 |
DEBUG_MSG("disconnected status = %d", status); |
293
|
0 |
69 |
DEBUG_MSG("%s", "start"); |
295
|
0 |
69 |
if(self->on_build_sock) { |
301
|
0 |
0 |
PUSHMARK(SP); |
304
|
0 |
0 |
FREETMPS; |
308
|
66 |
3 |
if(self->path) { |
314
|
0 |
69 |
if(ac == NULL) { |
315
|
0 |
0 |
DEBUG_MSG("%s", "allocation error"); |
318
|
1 |
68 |
if(ac->err) { |
319
|
0 |
1 |
DEBUG_MSG("connection error: %s", ac->errstr); |
333
|
68 |
0 |
if(self->cnx_timeout) { |
336
|
55103 |
68 |
while(!self->is_connected) { |
338
|
0 |
55103 |
if(self->ac == NULL) { |
345
|
0 |
55103 |
if(res != WAIT_FOR_EVENT_OK) { |
346
|
0 |
0 |
DEBUG_MSG("error: %d", res); |
360
|
68 |
0 |
if(self->on_connect){ |
362
|
0 |
68 |
PUSHMARK(SP); |
366
|
0 |
68 |
DEBUG_MSG("%s", "finish"); |
374
|
0 |
69 |
DEBUG_MSG("%s", "start"); |
381
|
3 |
66 |
if(self->reconnect == 0) { |
382
|
1 |
2 |
if(! __build_sock(aTHX_ self)) { |
383
|
0 |
1 |
if(self->path) { |
397
|
66 |
0 |
if(__build_sock(aTHX_ self)) { |
399
|
0 |
66 |
DEBUG_MSG("%s", "finish"); |
404
|
0 |
0 |
DEBUG_MSG("elapsed time:%f, reconnect:%lf", elapsed_time, self->reconnect); |
405
|
0 |
0 |
if( elapsed_time > self->reconnect) { |
406
|
0 |
0 |
if(self->path) { |
411
|
0 |
0 |
DEBUG_MSG("%s", "timed out"); |
415
|
0 |
0 |
DEBUG_MSG("%s", "failed to connect. wait..."); |
424
|
0 |
71 |
DEBUG_MSG("%s", "start"); |
425
|
71 |
0 |
if(self->is_connected && !self->ac && self->reconnect > 0) { |
|
3 |
68 |
if(self->is_connected && !self->ac && self->reconnect > 0) { |
|
0 |
3 |
if(self->is_connected && !self->ac && self->reconnect > 0) { |
426
|
0 |
0 |
DEBUG_MSG("%s", "connection not found. reconnect"); |
429
|
3 |
68 |
if(!self->ac) { |
430
|
0 |
3 |
DEBUG_MSG("%s", "Not connected to any server"); |
432
|
0 |
71 |
DEBUG_MSG("%s", "finish"); |
459
|
73 |
20 |
for (i = 0; i < reply->elements; i++) { |
461
|
3 |
70 |
if(collect_errors) { |
463
|
2 |
1 |
if(elem.result) { |
468
|
1 |
2 |
if(elem.error) { |
475
|
68 |
2 |
if(elem.result) { |
480
|
2 |
68 |
if(elem.error && !res.error) { |
|
2 |
0 |
if(elem.error && !res.error) { |
501
|
13 |
52 |
if (ret.error == NULL) { |
504
|
0 |
13 |
if (self->reconnect_on_error == NULL) { |
510
|
0 |
0 |
if( self->next_reconnect_on_error_at < 0 || |
|
0 |
0 |
if( self->next_reconnect_on_error_at < 0 || |
516
|
0 |
0 |
sv_ret = ret.result ? ret.result : &PL_sv_undef; |
520
|
0 |
0 |
PUSHMARK(SP); |
521
|
0 |
0 |
XPUSHs(sv_err); |
522
|
0 |
0 |
XPUSHs(sv_ret); |
523
|
0 |
0 |
XPUSHs(sv_cmd); |
530
|
0 |
0 |
if (count != 1) { |
533
|
0 |
0 |
_need_reconnect = POPi; |
536
|
0 |
0 |
FREETMPS; |
548
|
0 |
67 |
DEBUG_MSG("%p", (void*)privdata); |
549
|
66 |
1 |
if(reply) { |
551
|
0 |
66 |
if(cbt->custom_decode) { |
556
|
1 |
0 |
} else if(c->c.flags & REDIS_FREEING) { |
557
|
0 |
1 |
DEBUG_MSG("%s", "redis freeing"); |
560
|
0 |
0 |
DEBUG_MSG("connect error: %s", c->errstr); |
565
|
0 |
67 |
DEBUG_MSG("%s", "finish"); |
573
|
0 |
1 |
DEBUG_MSG("%p, %p", reply, privdata); |
574
|
1 |
0 |
if (reply) { |
585
|
0 |
1 |
if(cbt->custom_decode) { |
591
|
0 |
1 |
if(result.result == NULL) result.result = &PL_sv_undef; |
592
|
1 |
0 |
if(result.error == NULL) result.error = &PL_sv_undef; |
594
|
0 |
1 |
PUSHMARK(SP); |
595
|
0 |
1 |
XPUSHs(result.result); |
596
|
0 |
1 |
XPUSHs(result.error); |
601
|
1 |
0 |
FREETMPS; |
606
|
1 |
0 |
if (0 < self->reconnect && !self->need_reconnect |
|
1 |
0 |
if (0 < self->reconnect && !self->need_reconnect |
608
|
0 |
1 |
&& self->reconnect_on_error != NULL) { |
610
|
0 |
0 |
if(cbt->custom_decode) { |
625
|
0 |
0 |
if (c->c.flags & REDIS_FREEING) { |
626
|
0 |
0 |
DEBUG_MSG("%s", "redis freeing"); |
628
|
0 |
0 |
DEBUG_MSG("connect error: %s", c->errstr); |
641
|
0 |
0 |
if (c->c.flags & REDIS_FREEING) { |
646
|
0 |
0 |
DEBUG_MSG("error: %s", msg); |
649
|
0 |
0 |
PUSHMARK(SP); |
650
|
0 |
0 |
XPUSHs(result.result); |
651
|
0 |
0 |
XPUSHs(result.error); |
656
|
0 |
0 |
FREETMPS; |
673
|
0 |
0 |
DEBUG_MSG("%s", "start"); |
674
|
0 |
0 |
if(!cbt) { |
675
|
0 |
0 |
DEBUG_MSG("%s", "cbt is empty finished"); |
679
|
0 |
0 |
if (r) { |
690
|
0 |
0 |
if (strcasecmp(stype+pvariant,"subscribe") == 0) { |
691
|
0 |
0 |
DEBUG_MSG("%s %s %lld", r->element[0]->str, r->element[1]->str, r->element[2]->integer); |
694
|
0 |
0 |
} else if (strcasecmp(stype+pvariant,"unsubscribe") == 0) { |
695
|
0 |
0 |
DEBUG_MSG("%s %s %lld", r->element[0]->str, r->element[1]->str, r->element[2]->integer); |
700
|
0 |
0 |
DEBUG_MSG("%s %s", r->element[0]->str, r->element[1]->str); |
704
|
0 |
0 |
if(res.result == NULL) res.result = &PL_sv_undef; |
705
|
0 |
0 |
if(res.error == NULL) res.error = &PL_sv_undef; |
707
|
0 |
0 |
PUSHMARK(SP); |
708
|
0 |
0 |
XPUSHs(res.result); |
709
|
0 |
0 |
XPUSHs(res.error); |
714
|
0 |
0 |
FREETMPS; |
717
|
0 |
0 |
DEBUG_MSG("connect error: %s", c->errstr); |
721
|
0 |
0 |
if(is_need_free) { |
723
|
0 |
0 |
DEBUG_MSG("destroy %p", cbt); |
724
|
0 |
0 |
if(cbt->cb) { |
730
|
0 |
0 |
DEBUG_MSG("%s", "finish"); |
736
|
0 |
0 |
if(!self->ac) { |
753
|
0 |
0 |
if(_wait_all_responses(aTHX_ self) == WAIT_FOR_EVENT_OK) { |
754
|
0 |
0 |
DEBUG_MSG("%s", "wait_all_responses ok"); |
755
|
0 |
0 |
if(cbt->ret.result || cbt->ret.error) Safefree(cbt); |
|
0 |
0 |
if(cbt->ret.result || cbt->ret.error) Safefree(cbt); |
757
|
0 |
0 |
DEBUG_MSG("%s", "wait_all_responses not ok"); |
758
|
0 |
0 |
if(cbt->ret.result || cbt->ret.error) Safefree(cbt); |
|
0 |
0 |
if(cbt->ret.result || cbt->ret.error) Safefree(cbt); |
760
|
0 |
0 |
DEBUG_MSG("%s", "finish"); |
767
|
0 |
68 |
DEBUG_MSG("start %s", argv[0]); |
769
|
0 |
68 |
DEBUG_MSG("pid check: previous pid is %d, now %d", self->pid, getpid()); |
770
|
0 |
68 |
if(self->pid != getpid()) { |
771
|
0 |
0 |
DEBUG_MSG("%s", "pid changed. create new connection.."); |
775
|
0 |
68 |
if(EQUALS_COMMAND(argvlen[0], argv[0], "MULTI")) { |
|
0 |
0 |
if(EQUALS_COMMAND(argvlen[0], argv[0], "MULTI")) { |
777
|
1 |
67 |
} else if(EQUALS_COMMAND(argvlen[0], argv[0], "EXEC") || |
|
0 |
1 |
} else if(EQUALS_COMMAND(argvlen[0], argv[0], "EXEC") || |
|
0 |
67 |
} else if(EQUALS_COMMAND(argvlen[0], argv[0], "EXEC") || |
778
|
0 |
0 |
EQUALS_COMMAND(argvlen[0], argv[0], "DISCARD")) { |
780
|
0 |
67 |
} else if(EQUALS_COMMAND(argvlen[0], argv[0], "WATCH")) { |
|
0 |
0 |
} else if(EQUALS_COMMAND(argvlen[0], argv[0], "WATCH")) { |
782
|
0 |
67 |
} else if(EQUALS_COMMAND(argvlen[0], argv[0], "UNWATCH")) { |
|
0 |
0 |
} else if(EQUALS_COMMAND(argvlen[0], argv[0], "UNWATCH")) { |
786
|
1 |
67 |
if(cb) { |
803
|
65 |
2 |
int i, cnt = (self->reconnect == 0 ? 1 : 2); |
805
|
67 |
0 |
for(i = 0; i < cnt; i++) { |
814
|
0 |
67 |
DEBUG_MSG("%s", "send command in sync mode"); |
819
|
0 |
67 |
DEBUG_MSG("%s", "waiting response"); |
821
|
66 |
1 |
if(res == WAIT_FOR_EVENT_OK && self->need_reconnect == 0) { |
|
66 |
0 |
if(res == WAIT_FOR_EVENT_OK && self->need_reconnect == 0) { |
823
|
65 |
1 |
if (1 < cnt - i) { |
828
|
0 |
65 |
if (_need_reconnect) { |
832
|
66 |
0 |
if (!_need_reconnect) { |
834
|
11 |
55 |
if(cbt->ret.result || cbt->ret.error) Safefree(cbt); |
|
11 |
0 |
if(cbt->ret.result || cbt->ret.error) Safefree(cbt); |
835
|
0 |
66 |
DEBUG_MSG("finish %s", argv[0]); |
840
|
0 |
1 |
if( res == WAIT_FOR_EVENT_READ_TIMEOUT ) break; |
842
|
0 |
0 |
if(self->flags & (FLAG_INSIDE_TRANSACTION | FLAG_INSIDE_WATCH)) { |
844
|
0 |
0 |
DEBUG_MSG("error: %s", msg); |
850
|
0 |
0 |
if(!self->ac) { |
852
|
0 |
0 |
DEBUG_MSG("error: %s", msg); |
858
|
0 |
1 |
if( res == WAIT_FOR_EVENT_OK && (cbt->ret.result || cbt->ret.error) ) Safefree(cbt); |
|
0 |
0 |
if( res == WAIT_FOR_EVENT_OK && (cbt->ret.result || cbt->ret.error) ) Safefree(cbt); |
|
0 |
0 |
if( res == WAIT_FOR_EVENT_OK && (cbt->ret.result || cbt->ret.error) ) Safefree(cbt); |
861
|
1 |
0 |
if(res == WAIT_FOR_EVENT_READ_TIMEOUT || res == WAIT_FOR_EVENT_WRITE_TIMEOUT) { |
864
|
0 |
1 |
DEBUG_MSG("error: %s", self->error); |
868
|
0 |
0 |
if(!self->ac) { |
870
|
0 |
0 |
DEBUG_MSG("error: %s", msg); |
875
|
0 |
1 |
DEBUG_MSG("Finish %s", argv[0]); |
887
|
0 |
0 |
if(reply->type == REDIS_REPLY_STRING || |
895
|
0 |
0 |
while(len != 0) { |
899
|
0 |
0 |
if(line == NULL) { |
905
|
0 |
0 |
if(str[0] != '#' && sep != NULL) { |
|
0 |
0 |
if(str[0] != '#' && sep != NULL) { |
912
|
0 |
0 |
if (ret == NULL) { |
917
|
0 |
0 |
if(line == NULL) { |
940
|
0 |
70 |
DEBUG_MSG("%s", "start"); |
947
|
0 |
70 |
DEBUG_MSG("return %p", ST(0)); |
1082
|
0 |
0 |
RETVAL = self->ac ? self->ac->c.fd : 0; |
1145
|
0 |
0 |
if ( -1 < val ) { |
1169
|
0 |
70 |
DEBUG_MSG("%s", "start"); |
1170
|
62 |
8 |
if (self->ac) { |
1171
|
0 |
62 |
DEBUG_MSG("%s", "free ac"); |
1177
|
4 |
66 |
if(self->hostname) { |
1178
|
0 |
4 |
DEBUG_MSG("%s", "free hostname"); |
1183
|
66 |
4 |
if(self->path) { |
1184
|
0 |
66 |
DEBUG_MSG("%s", "free path"); |
1189
|
70 |
0 |
if(self->error) { |
1190
|
0 |
70 |
DEBUG_MSG("%s", "free error"); |
1195
|
70 |
0 |
if(self->on_connect) { |
1196
|
0 |
70 |
DEBUG_MSG("%s", "free on_connect"); |
1201
|
0 |
70 |
if(self->on_build_sock) { |
1202
|
0 |
0 |
DEBUG_MSG("%s", "free on_build_sock"); |
1207
|
70 |
0 |
if(self->data) { |
1208
|
0 |
70 |
DEBUG_MSG("%s", "free data"); |
1213
|
0 |
70 |
if(self->reconnect_on_error) { |
1214
|
0 |
0 |
DEBUG_MSG("%s", "free reconnect_on_error"); |
1219
|
0 |
70 |
DEBUG_MSG("%s", "finish"); |
1228
|
0 |
4 |
if(self->hostname) { |
1233
|
0 |
4 |
if(self->path) { |
1238
|
4 |
0 |
if(hostname) { |
1250
|
0 |
66 |
if(self->hostname) { |
1255
|
0 |
66 |
if(self->path) { |
1260
|
66 |
0 |
if(path) { |
1279
|
0 |
1 |
if(res != WAIT_FOR_EVENT_OK) { |
1283
|
1 |
0 |
if (0 < self->reconnect && self->need_reconnect) { |
|
0 |
1 |
if (0 < self->reconnect && self->need_reconnect) { |
1296
|
0 |
0 |
if(res != WAIT_FOR_EVENT_OK) { |
1300
|
0 |
0 |
if (0 < self->reconnect && self->need_reconnect) { |
|
0 |
0 |
if (0 < self->reconnect && self->need_reconnect) { |
1320
|
0 |
68 |
if(!self->ac) { |
1325
|
1 |
67 |
if (SvROK(cb) && SvTYPE(SvRV(cb)) == SVt_PVCV) { |
|
1 |
0 |
if (SvROK(cb) && SvTYPE(SvRV(cb)) == SVt_PVCV) { |
1331
|
0 |
68 |
Newx(argv, sizeof(char*) * argc, char*); |
1332
|
0 |
68 |
Newx(argvlen, sizeof(size_t) * argc, size_t); |
1334
|
136 |
68 |
for (i = 0; i < argc; i++) { |
1335
|
0 |
136 |
if(!sv_utf8_downgrade(ST(i + 1), 1)) { |
1338
|
136 |
0 |
argv[i] = SvPV(ST(i + 1), len); |
1343
|
1 |
67 |
if(cb && EQUALS_COMMAND(argvlen[0], argv[0], "EXEC")) |
|
1 |
0 |
if(cb && EQUALS_COMMAND(argvlen[0], argv[0], "EXEC")) |
|
1 |
0 |
if(cb && EQUALS_COMMAND(argvlen[0], argv[0], "EXEC")) |
1351
|
56 |
12 |
ST(0) = ret.result ? ret.result : &PL_sv_undef; |
1352
|
14 |
54 |
ST(1) = ret.error ? ret.error : &PL_sv_undef; |
1361
|
0 |
0 |
DEBUG_MSG("%s", "start QUIT"); |
1362
|
0 |
0 |
if(self->ac) { |
1367
|
0 |
0 |
DEBUG_MSG("%s", "finish. there is no connection."); |
1377
|
0 |
0 |
DEBUG_MSG("%s", "start SHUTDOWN"); |
1378
|
0 |
0 |
if(self->ac) { |
1388
|
0 |
0 |
DEBUG_MSG("%s", "redis server has alread shutdown"); |
1406
|
0 |
0 |
if(!self->ac) { |
1411
|
0 |
0 |
if (SvROK(cb) && SvTYPE(SvRV(cb)) == SVt_PVCV) { |
|
0 |
0 |
if (SvROK(cb) && SvTYPE(SvRV(cb)) == SVt_PVCV) { |
1417
|
0 |
0 |
Newx(argv, sizeof(char*) * argc, char*); |
1418
|
0 |
0 |
Newx(argvlen, sizeof(size_t) * argc, size_t); |
1422
|
0 |
0 |
for (i = 1; i < argc; i++) { |
1423
|
0 |
0 |
argv[i] = SvPV(ST(i), len); |
1431
|
0 |
0 |
ST(0) = ret.result ? ret.result : &PL_sv_undef; |
1432
|
0 |
0 |
ST(1) = ret.error ? ret.error : &PL_sv_undef; |
1449
|
3 |
0 |
if(!self->ac) { |
1457
|
0 |
0 |
if (SvROK(cb) && SvTYPE(SvRV(cb)) == SVt_PVCV) { |
|
0 |
0 |
if (SvROK(cb) && SvTYPE(SvRV(cb)) == SVt_PVCV) { |
1463
|
0 |
0 |
Newx(argv, sizeof(char*) * argc, char*); |
1464
|
0 |
0 |
Newx(argvlen, sizeof(size_t) * argc, size_t); |
1468
|
0 |
0 |
for (i = 1; i < argc; i++) { |
1469
|
0 |
0 |
argv[i] = SvPV(ST(i), len); |
1477
|
0 |
0 |
ST(0) = ret.result ? ret.result : &PL_sv_undef; |
1478
|
0 |
0 |
ST(1) = ret.error ? ret.error : &PL_sv_undef; |
1495
|
0 |
0 |
int cnt = (self->reconnect == 0 ? 1 : 2); |
1497
|
0 |
0 |
DEBUG_MSG("%s", "start"); |
1500
|
0 |
0 |
if(!self->ac) { |
1504
|
0 |
0 |
if(!self->is_subscriber) { |
1508
|
0 |
0 |
if (SvROK(cb) && SvTYPE(SvRV(cb)) == SVt_PVCV) { |
|
0 |
0 |
if (SvROK(cb) && SvTYPE(SvRV(cb)) == SVt_PVCV) { |
1514
|
0 |
0 |
Newx(argv, sizeof(char*) * argc, char*); |
1515
|
0 |
0 |
Newx(argvlen, sizeof(size_t) * argc, size_t); |
1517
|
0 |
0 |
for (i = 0; i < argc; i++) { |
1518
|
0 |
0 |
argv[i] = SvPV(ST(i+1), len); |
1520
|
0 |
0 |
DEBUG_MSG("argv[%d] = %s", i, argv[i]); |
1523
|
0 |
0 |
for(i = 0; i < cnt; i++) { |
1525
|
0 |
0 |
if (strcasecmp(argv[0]+pvariant,"unsubscribe") != 0) { |
1526
|
0 |
0 |
DEBUG_MSG("%s", "command is not unsubscribe"); |
1531
|
0 |
0 |
DEBUG_MSG("%s", "command is unsubscribe"); |
1534
|
0 |
0 |
redisAsyncCommandArgv( |
1539
|
0 |
0 |
while(self->expected_subs > 0 && wait_for_event(aTHX_ self, self->read_timeout, self->write_timeout) == WAIT_FOR_EVENT_OK) ; |
|
0 |
0 |
while(self->expected_subs > 0 && wait_for_event(aTHX_ self, self->read_timeout, self->write_timeout) == WAIT_FOR_EVENT_OK) ; |
1540
|
0 |
0 |
if(self->expected_subs == 0) break; |
1542
|
0 |
0 |
if(!self->ac) { |
1551
|
0 |
0 |
DEBUG_MSG("%s", "finish"); |
1559
|
0 |
0 |
int i, cnt = (self->reconnect == 0 ? 1 : 2); |
1561
|
0 |
0 |
DEBUG_MSG("%s", "start"); |
1563
|
0 |
0 |
for(i = 0; i < cnt; i++) { |
1564
|
0 |
0 |
while((res = wait_for_event(aTHX_ self, timeout, timeout)) == WAIT_FOR_EVENT_OK) ; |
1565
|
0 |
0 |
if(res == WAIT_FOR_EVENT_READ_TIMEOUT || res == WAIT_FOR_EVENT_WRITE_TIMEOUT) break; |
1567
|
0 |
0 |
if(!self->ac) { |
1571
|
0 |
0 |
if(res == WAIT_FOR_EVENT_EXCEPTION) { |
1572
|
0 |
0 |
if(!self->ac) { |
1573
|
0 |
0 |
DEBUG_MSG("%s", "Connection not found"); |
1575
|
0 |
0 |
} else if(self->ac->c.err == REDIS_ERR_EOF) { |
1576
|
0 |
0 |
DEBUG_MSG("hiredis returns error: %s", self->ac->c.errstr); |
1579
|
0 |
0 |
DEBUG_MSG("hiredis returns error: %s", self->ac->c.errstr); |
1585
|
0 |
0 |
DEBUG_MSG("finish with %d", res); |
1593
|
0 |
0 |
DEBUG_MSG("%s", "start"); |
1595
|
0 |
0 |
DEBUG_MSG("%s", "finish"); |