diff --git a/daemon/call.c b/daemon/call.c index fdb9f5c79..ac2cb90d5 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1591,7 +1591,7 @@ restart: rwlock_unlock_r(&m->hashlock); } - if (viabranch && !g_hash_table_lookup(c->branches, viabranch)) + if (viabranch && *viabranch && !g_hash_table_lookup(c->branches, viabranch)) g_hash_table_insert(c->branches, call_strdup(c, viabranch), (void *) 0x1); @@ -1688,24 +1688,29 @@ char *call_lookup_udp(const char **out, struct callmaster *m) { struct stream st; int num; char *ret; + const char *branch; rwlock_lock_r(&m->hashlock); c = g_hash_table_lookup(m->callhash, out[RE_UDP_UL_CALLID]); if (c) mutex_lock(&c->lock); - if (!c || !g_hash_table_lookup(c->branches, out[RE_UDP_UL_VIABRANCH])) { - if (c) - mutex_unlock(&c->lock); + else { rwlock_unlock_r(&m->hashlock); mylog(LOG_WARNING, LOG_PREFIX_CI "Got UDP LOOKUP for unknown call-id or unknown via-branch", out[RE_UDP_UL_CALLID], out[RE_UDP_UL_VIABRANCH]); xasprintf(&ret, "%s 0 " IPF "\n", out[RE_UDP_COOKIE], IPP(m->conf.ipv4)); return ret; } + obj_hold(c); rwlock_unlock_r(&m->hashlock); - log_info = out[RE_UDP_UL_VIABRANCH]; + branch = out[RE_UDP_UL_VIABRANCH]; + if (branch && *branch && !g_hash_table_lookup(c->branches, branch)) + g_hash_table_insert(c->branches, call_strdup(c, branch), + (void *) 0x1); + + log_info = branch; c->called_agent = "UNKNOWN(udp)"; if (addr_parse_udp(&st, out)) diff --git a/daemon/main.c b/daemon/main.c index 6ba5db78b..36341cedf 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -316,7 +316,9 @@ static void wpidfile(void) { static void init_everything() { +#if !GLIB_CHECK_VERSION(2,32,0) g_thread_init(NULL); +#endif openlog("mediaproxy-ng", LOG_PID | LOG_NDELAY, LOG_DAEMON); signals(); resources(); diff --git a/debian/rules b/debian/rules index 706025395..18d3d107d 100755 --- a/debian/rules +++ b/debian/rules @@ -37,7 +37,7 @@ build: build-stamp build-stamp: dh_testdir make -C iptables-extension - make -C daemon + make -C daemon -j`nproc` touch $@ clean: