diff --git a/daemon/call.c b/daemon/call.c index e78820583..b1dba01c5 100644 --- a/daemon/call.c +++ b/daemon/call.c @@ -1038,6 +1038,12 @@ static void callmaster_timer(void *ptr) { sr->kstats.packets = ke->stats.packets; sr->kstats.bytes = ke->stats.bytes; sr->kstats.errors = ke->stats.errors; + + if (sr->crypto.out.crypto_suite) + sr->crypto.out.s_l = ke->target.encrypt.last_index; + if (sr->crypto.in.crypto_suite) + sr->other->crypto.in.s_l = ke->target.decrypt.last_index; + mutex_unlock(&cs->lock); next: @@ -1715,7 +1721,11 @@ static void unkernelize(struct peer *p) { return; for (i = 0; i < 2; i++) { + if (!p->kernelized) + continue; r = &p->rtps[i]; + if (r->no_kernel_support) + continue; kernel_del_stream(p->up->call->callmaster->conf.kernelfd, r->fd.localport); r->no_kernel_support = 0; } diff --git a/kernel-module/xt_MEDIAPROXY.c b/kernel-module/xt_MEDIAPROXY.c index 4c62329bc..77a60b11a 100644 --- a/kernel-module/xt_MEDIAPROXY.c +++ b/kernel-module/xt_MEDIAPROXY.c @@ -685,11 +685,20 @@ static ssize_t proc_blist_read(struct file *f, char __user *b, size_t l, loff_t } memset(&op, 0, sizeof(op)); - spin_lock_irqsave(&g->stats_lock, flags); memcpy(&op.target, &g->target, sizeof(op.target)); + + spin_lock_irqsave(&g->stats_lock, flags); memcpy(&op.stats, &g->stats, sizeof(op.stats)); spin_unlock_irqrestore(&g->stats_lock, flags); + spin_lock_irqsave(&g->decrypt.lock, flags); + op.target.decrypt.last_index = g->target.decrypt.last_index; + spin_unlock_irqrestore(&g->decrypt.lock, flags); + + spin_lock_irqsave(&g->encrypt.lock, flags); + op.target.encrypt.last_index = g->target.encrypt.last_index; + spin_unlock_irqrestore(&g->encrypt.lock, flags); + target_push(g); err = -EFAULT;