Change session_link_dcb to void

The function attempted to detect use of freed memory, which is a
futile excersize.
This commit is contained in:
Johan Wikman
2017-09-07 15:01:17 +03:00
parent 44db97215f
commit 80815e0f54
3 changed files with 14 additions and 38 deletions

View File

@ -389,11 +389,8 @@ dcb_connect(SERVER *server, MXS_SESSION *session, const char *protocol)
/** /**
* Link dcb to session. Unlink is called in dcb_final_free * Link dcb to session. Unlink is called in dcb_final_free
*/ */
if (!session_link_dcb(session, dcb)) session_link_dcb(session, dcb);
{
dcb_close(dcb);
return NULL;
}
MXS_DEBUG("Reusing a persistent connection, dcb %p", dcb); MXS_DEBUG("Reusing a persistent connection, dcb %p", dcb);
dcb->persistentstart = 0; dcb->persistentstart = 0;
dcb->was_persistent = true; dcb->was_persistent = true;
@ -441,11 +438,8 @@ dcb_connect(SERVER *server, MXS_SESSION *session, const char *protocol)
/** /**
* Link dcb to session. Unlink is called in dcb_final_free * Link dcb to session. Unlink is called in dcb_final_free
*/ */
if (!session_link_dcb(session, dcb)) session_link_dcb(session, dcb);
{
dcb_final_free(dcb);
return NULL;
}
fd = dcb->func.connect(dcb, server, session); fd = dcb->func.connect(dcb, server, session);
if (fd == DCBFD_CLOSED) if (fd == DCBFD_CLOSED)

View File

@ -42,7 +42,14 @@ typedef enum
int session_isvalid(MXS_SESSION *); int session_isvalid(MXS_SESSION *);
const char *session_state(mxs_session_state_t); const char *session_state(mxs_session_state_t);
bool session_link_dcb(MXS_SESSION *, struct dcb *);
/**
* Link a session to a DCB.
*
* @param session The session to link with the dcb
* @param dcb The DCB to be linked
*/
void session_link_dcb(MXS_SESSION *session, struct dcb *dcb);
RESULTSET *sessionGetList(SESSIONLISTFILTER); RESULTSET *sessionGetList(SESSIONLISTFILTER);

View File

@ -13,19 +13,6 @@
/** /**
* @file session.c - A representation of the session within the gateway. * @file session.c - A representation of the session within the gateway.
*
* @verbatim
* Revision History
*
* Date Who Description
* 17/06/13 Mark Riddoch Initial implementation
* 02/09/13 Massimiliano Pinto Added session refcounter
* 29/05/14 Mark Riddoch Addition of filter mechanism
* 23/08/15 Martin Brampton Tidying; slight improvement in safety
* 17/09/15 Martin Brampton Keep failed session in existence - leave DCBs to close
* 27/06/16 Martin Brampton Amend to utilise list manager
*
* @endverbatim
*/ */
#include <maxscale/session.h> #include <maxscale/session.h>
@ -327,28 +314,16 @@ session_set_dummy(DCB *client_dcb)
return session; return session;
} }
/** void session_link_dcb(MXS_SESSION *session, DCB *dcb)
* Link a session to a DCB.
*
* @param session The session to link with the dcb
* @param dcb The DCB to be linked
* @return True if the session was sucessfully linked to the DCB
*/
bool
session_link_dcb(MXS_SESSION *session, DCB *dcb)
{ {
ss_info_dassert(session->state != SESSION_STATE_FREE, ss_info_dassert(session->state != SESSION_STATE_FREE,
"If session->state is SESSION_STATE_FREE then this attempt to " "If session->state is SESSION_STATE_FREE then this attempt to "
"access freed memory block."); "access freed memory block.");
if (session->state == SESSION_STATE_FREE)
{
return false;
}
atomic_add(&session->refcount, 1); atomic_add(&session->refcount, 1);
dcb->session = session; dcb->session = session;
/** Move this DCB under the same thread */ /** Move this DCB under the same thread */
dcb->poll.thread.id = session->client_dcb->poll.thread.id; dcb->poll.thread.id = session->client_dcb->poll.thread.id;
return true;
} }
/** /**