DragonFlyBSD Kernel Audit
DF-2615 / instrument.diff
← back to finding ↓ download raw
diff --git a/sys/kern/kern_dmsg.c b/sys/kern/kern_dmsg.c
index d6e90ee..a719936 100644
--- a/sys/kern/kern_dmsg.c
+++ b/sys/kern/kern_dmsg.c
@@ -277,8 +277,12 @@ kdmsg_iocom_uninit(kdmsg_iocom_t *iocom)
 	lockmgr(&iocom->msglk, LK_EXCLUSIVE);
 
 	atomic_set_int(&iocom->msg_ctl, KDMSG_CLUSTERCTL_KILLRX);
+	kprintf("DF2615_DBG: uninit entered rd_td=%p wr_td=%p flags=%08x\n",
+		iocom->msgrd_td, iocom->msgwr_td, iocom->flags);
 	msg = kdmsg_msg_alloc(&iocom->state0, DMSG_LNK_PING, NULL, NULL);
 	kdmsg_msg_write_locked(iocom, msg);
+	kprintf("DF2615_DBG: after ping write, msgq.first=%p\n",
+		TAILQ_FIRST(&iocom->msgq));
 
 	retries = 10;
 	while (iocom->msgrd_td || iocom->msgwr_td) {
@@ -313,6 +317,16 @@ kdmsg_iocom_uninit(kdmsg_iocom_t *iocom)
 		fdrop(iocom->msg_fp);
 		iocom->msg_fp = NULL;
 	}
+	{
+		kdmsg_msg_t *m;
+		int nleak = 0;
+		TAILQ_FOREACH(m, &iocom->msgq, qentry)
+			++nleak;
+		kprintf("DF2615_DBG: uninit exit msgq_nleak=%d\n", nleak);
+		if (nleak)
+			kprintf("DF2615_LEAK: %d kdmsg_msg(s) queued at "
+				"iocom_uninit exit\n", nleak);
+	}
 	lockmgr(&iocom->msglk, LK_RELEASE);
 }