reorder calls to redis for proper locking

remotes/origin/2.0
Richard Fuchs 13 years ago
parent 22083298b9
commit f20f72c27a

@ -198,7 +198,7 @@ static int stream_packet(struct streamrelay *r, char *b, int l, struct sockaddr_
struct streamrelay *p, *p2;
struct peer *pe, *pe2;
struct callstream *cs;
int ret;
int ret, update = 0;
struct sockaddr_in sin;
struct sockaddr_in6 sin6;
struct msghdr mh;
@ -263,8 +263,7 @@ peerinfo:
if (pe->confirmed && pe2->confirmed && pe2->filled)
kernelize(cs);
if (redis_update)
redis_update(c, m->conf.redis);
update = 1;
forward:
if (IN6_IS_ADDR_UNSPECIFIED(&r->peer.ip46) || !r->peer.port || !r->fd_family)
@ -337,10 +336,11 @@ forward:
mutex_lock(&m->statspslock);
m->statsps.errors++;
mutex_unlock(&m->statspslock);
return -1;
goto out;
}
drop:
ret = 0;
r->stats.packets++;
r->stats.bytes += l;
r->last = poller_now;
@ -350,7 +350,11 @@ drop:
m->statsps.bytes += l;
mutex_unlock(&m->statspslock);
return 0;
out:
if (update && redis_update)
redis_update(c, m->conf.redis);
return ret;
}
@ -1625,14 +1629,14 @@ char *call_update_udp(const char **out, struct callmaster *m) {
g_queue_push_tail(&q, &st);
num = call_streams(c, &q, out[RE_UDP_UL_FROMTAG], 0);
g_queue_clear(&q);
ret = streams_print(c->callstreams, 1, (num >= 0) ? 0 : 1, out[RE_UDP_COOKIE], 1);
mutex_unlock(&c->lock);
if (redis_update)
redis_update(c, m->conf.redis);
ret = streams_print(c->callstreams, 1, (num >= 0) ? 0 : 1, out[RE_UDP_COOKIE], 1);
mutex_unlock(&c->lock);
mylog(LOG_INFO, LOG_PREFIX_CI "Returning to SIP proxy: %s", LOG_PARAMS_CI(c), ret);
log_info = NULL;
obj_put(c);
@ -1675,14 +1679,14 @@ char *call_lookup_udp(const char **out, struct callmaster *m) {
g_queue_push_tail(&q, &st);
num = call_streams(c, &q, out[RE_UDP_UL_TOTAG], 1);
g_queue_clear(&q);
ret = streams_print(c->callstreams, 1, (num >= 0) ? 1 : 0, out[RE_UDP_COOKIE], 1);
mutex_unlock(&c->lock);
if (redis_update)
redis_update(c, m->conf.redis);
ret = streams_print(c->callstreams, 1, (num >= 0) ? 1 : 0, out[RE_UDP_COOKIE], 1);
mutex_unlock(&c->lock);
mylog(LOG_INFO, LOG_PREFIX_CI "Returning to SIP proxy: %s", LOG_PARAMS_CI(c), ret);
log_info = NULL;
obj_put(c);
@ -1710,12 +1714,12 @@ char *call_request(const char **out, struct callmaster *m) {
s = streams_parse(out[RE_TCP_RL_STREAMS], m);
num = call_streams(c, s, g_hash_table_lookup(c->infohash, "fromtag"), 0);
streams_free(s);
ret = streams_print(c->callstreams, abs(num), (num >= 0) ? 0 : 1, NULL, 0);
mutex_unlock(&c->lock);
if (redis_update)
redis_update(c, m->conf.redis);
ret = streams_print(c->callstreams, abs(num), (num >= 0) ? 0 : 1, NULL, 0);
mutex_unlock(&c->lock);
mylog(LOG_INFO, LOG_PREFIX_CI "Returning to SIP proxy: %s", LOG_PARAMS_CI(c), ret);
obj_put(c);
return ret;
@ -1743,12 +1747,12 @@ char *call_lookup(const char **out, struct callmaster *m) {
s = streams_parse(out[RE_TCP_RL_STREAMS], m);
num = call_streams(c, s, g_hash_table_lookup(c->infohash, "totag"), 1);
streams_free(s);
ret = streams_print(c->callstreams, abs(num), (num >= 0) ? 1 : 0, NULL, 0);
mutex_unlock(&c->lock);
if (redis_update)
redis_update(c, m->conf.redis);
ret = streams_print(c->callstreams, abs(num), (num >= 0) ? 1 : 0, NULL, 0);
mutex_unlock(&c->lock);
mylog(LOG_INFO, LOG_PREFIX_CI "Returning to SIP proxy: %s", LOG_PARAMS_CI(c), ret);
obj_put(c);
return ret;

Loading…
Cancel
Save