From 1120ae9b2c7ddbfcf6c6be8c2c475fe039c7b0ed Mon Sep 17 00:00:00 2001 From: vraatikka Date: Fri, 27 Sep 2013 11:20:28 +0300 Subject: [PATCH] Zombie processing had an risk of getting into an infinite loop. --- server/core/dcb.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/server/core/dcb.c b/server/core/dcb.c index d301132d2..ca9b985d0 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -160,6 +160,7 @@ dcb_add_to_zombieslist(DCB *dcb) if (dcb->state != DCB_STATE_NOPOLLING) { ss_dassert(dcb->state != DCB_STATE_POLLING && dcb->state != DCB_STATE_LISTENING); + spinlock_release(&zombiespin); return; } @@ -251,14 +252,12 @@ void* rsession = NULL; */ { SESSION *local_session = dcb->session; -#if 1 /** * Remove reference from session if dcb is client. */ if (local_session->client == dcb) { local_session->client = NULL; } -#endif dcb->session = NULL; session_free(local_session); } @@ -621,6 +620,7 @@ dcb_write(DCB *dcb, GWBUF *queue) { int w, saved_errno = 0; + ss_dassert(queue != NULL); spinlock_acquire(&dcb->writeqlock); if (dcb->writeq) @@ -700,10 +700,6 @@ int w, saved_errno = 0; * queue with have. */ queue = gwbuf_consume(queue, w); - if (w < len) - { - /* We didn't write all the data */ - } skygw_log_write( LOGFILE_TRACE, "%lu [dcb_write] Wrote %d Bytes to dcb %p fd %d", @@ -718,7 +714,7 @@ int w, saved_errno = 0; { dcb->stats.n_buffered++; } - } + } /* if (dcb->writeq) */ spinlock_release(&dcb->writeqlock); if (queue && (saved_errno != EAGAIN || saved_errno != EWOULDBLOCK))