Added session refcount in session.h
The refcount is incremented in dcb_connect and in mysql_client.c after session_alloc
This commit is contained in:
@ -39,7 +39,8 @@
|
||||
* for handling backend asynchronous protocol connection
|
||||
* and a generic lock for backend authentication
|
||||
* 16/07/2013 Massimiliano Pinto Added command type for dcb
|
||||
* 23/07/13 Mark Riddoch Tidy up logging
|
||||
* 23/07/2013 Mark Riddoch Tidy up logging
|
||||
* 02/09/2013 Massimiliano Pinto Added session refcount
|
||||
*
|
||||
* @endverbatim
|
||||
*/
|
||||
@ -314,6 +315,8 @@ GWPROTOCOL *funcs;
|
||||
memcpy(&(dcb->func), funcs, sizeof(GWPROTOCOL));
|
||||
dcb->session = session;
|
||||
|
||||
atomic_add(&dcb->session->refcount, 1);
|
||||
|
||||
if ((dcb->fd = dcb->func.connect(dcb, server, session)) == -1)
|
||||
{
|
||||
dcb_final_free(dcb);
|
||||
@ -646,6 +649,8 @@ dcb_close(DCB *dcb)
|
||||
pthread_self());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dcb->session) {
|
||||
session_free(dcb->session);
|
||||
skygw_log_write_flush(
|
||||
LOGFILE_TRACE,
|
||||
|
||||
@ -22,8 +22,9 @@
|
||||
* @verbatim
|
||||
* Revision History
|
||||
*
|
||||
* Date Who Description
|
||||
* 17/06/13 Mark Riddoch Initial implementation
|
||||
* Date Who Description
|
||||
* 17/06/13 Mark Riddoch Initial implementation
|
||||
* 02/09/13 Massimiliano Pinto Added session refcounter
|
||||
*
|
||||
* @endverbatim
|
||||
*/
|
||||
@ -75,6 +76,9 @@ session_alloc(SERVICE *service, DCB *client)
|
||||
strerror(eno));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
session->refcount = 0;
|
||||
|
||||
session->ses_chk_top = CHK_NUM_SESSION;
|
||||
session->ses_chk_tail = CHK_NUM_SESSION;
|
||||
spinlock_init(&session->ses_lock);
|
||||
@ -149,8 +153,12 @@ SESSION *ptr;
|
||||
}
|
||||
spinlock_release(&session_spin);
|
||||
atomic_add(&session->service->stats.n_current, -1);
|
||||
|
||||
/* Clean up session and free the memory */
|
||||
free(session);
|
||||
if (atomic_add(&session->refcount, -1) == 1)
|
||||
{
|
||||
free(session);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user