diff options
author | Paul J Stevens <paul@nfg.nl> | 2010-07-24 22:29:39 +0200 |
---|---|---|
committer | Paul J Stevens <paul@nfg.nl> | 2010-07-24 22:29:39 +0200 |
commit | b3d01587d113a9cd3bc639a3fff1f5abf3946c84 (patch) | |
tree | b0b2d0d1c6c903ea18aae3ce9de1a343f0acc957 | |
parent | e13dc19a858e27bc87dcc47107ed485f341dda51 (diff) |
prevent spinlock in ssl session
break the loop in case of EAGAIN errors during ssl-writes.
-rw-r--r-- | src/clientbase.c | 4 | ||||
-rw-r--r-- | src/server.c | 3 |
2 files changed, 5 insertions, 2 deletions
diff --git a/src/clientbase.c b/src/clientbase.c index 206804f3..cbf99d5a 100644 --- a/src/clientbase.c +++ b/src/clientbase.c @@ -303,8 +303,10 @@ int ci_write(clientbase_t *self, char * msg, ...) if (t == -1) { if ((e = self->cb_error(self->tx, e, (void *)self))) { self->client_state |= CLIENT_ERR; - return e; + } else { + event_add(self->wev, NULL); } + return e; } else { TRACE(TRACE_INFO, "[%p] S > [%ld/%ld:%s]", self, t, self->write_buffer->len, s); diff --git a/src/server.c b/src/server.c index dd757cf2..8eca2604 100644 --- a/src/server.c +++ b/src/server.c @@ -140,8 +140,9 @@ void dm_thread_data_sendmessage(gpointer data) { dm_thread_data *D = (dm_thread_data *)data; ImapSession *session = (ImapSession *)D->session; - if (D->data && session) + if (D->data && session) { ci_write(session->ci, "%s", (char *)D->data); + } } /* |