Comment on conn.c/conn_pool_put ()

"Paul Keogh" <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
This function (see below) can add *multiple* Conns to the pool
based on the same key. Why is this needed ? It may make more
sense to use dict_put_once() rather than dict_put() to
ensure that the Conns added to the pool are unique. 

For this function to make sense, the opposite function should
randomly select a Conn from the returned list (conn_pool_get()).
It does'nt do this, instead it takes the first one that is still
alive.

The reason that this is an issue is that multiple Conns will hold
open resources on a server (notably socket descriptors) but will
never be used by the client. I have had a situation where the PPG
ran out of descriptors under a stress test from test_ppg.

Thanx,

static void conn_pool_put(Connection *conn, Octstr *host, int port)
{
    Octstr *key;
    List *list;
    
    mutex_lock(conn_pool_lock);
    key = conn_pool_key(host, port);
    list = dict_get(conn_pool, key);
    if (list == NULL) {
    	list = list_create();
	dict_put(conn_pool, key, list);
    }
    list_append(list, conn);
    octstr_destroy(key);
    mutex_unlock(conn_pool_lock);
}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.