Implement ticket #314: Added PJ_SAFE_POOL configuration in PJLIB to track down memory corruptions

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1333 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjlib/src/pj/pool_caching.c b/pjlib/src/pj/pool_caching.c
index b00bf10..01c303d 100644
--- a/pjlib/src/pj/pool_caching.c
+++ b/pjlib/src/pj/pool_caching.c
@@ -99,6 +99,8 @@
     while (pool != (pj_pool_t*) &cp->used_list) {
 	pj_pool_t *next = pool->next;
 	pj_list_erase(pool);
+	PJ_LOG(4,(pool->obj_name, 
+		  "Pool is not released by application, releasing now"));
 	pj_pool_destroy_int(pool);
 	pool = next;
     }
@@ -197,8 +199,18 @@
 
     PJ_CHECK_STACK();
 
+    PJ_ASSERT_ON_FAIL(pf && pool, return);
+
     pj_lock_acquire(cp->lock);
 
+#if PJ_SAFE_POOL
+    /* Make sure pool is still in our used list */
+    if (pj_list_find_node(&cp->used_list, pool) != pool) {
+	pj_assert(!"Attempt to destroy pool that has been destroyed before");
+	return;
+    }
+#endif
+
     /* Erase from the used list. */
     pj_list_erase(pool);