From aa42534208e4089bd46708da8007b0bdd0e36711 Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Wed, 21 Jun 2017 11:50:06 +0800 Subject: [PATCH] use trylock in send_buffer --- skynet-src/socket_server.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/skynet-src/socket_server.c b/skynet-src/socket_server.c index 4fbed4828..c73a70db5 100644 --- a/skynet-src/socket_server.c +++ b/skynet-src/socket_server.c @@ -682,7 +682,8 @@ send_buffer_(struct socket_server *ss, struct socket *s, struct socket_message * static int send_buffer(struct socket_server *ss, struct socket *s, struct socket_message *result) { - spinlock_lock(&s->dw_lock); + if (!spinlock_trylock(&s->dw_lock)) + return -1; // blocked by direct write, send later. if (s->dw_buffer) { // add direct write buffer before high.head struct write_buffer * buf = MALLOC(SIZEOF_TCPBUFFER); @@ -1445,8 +1446,9 @@ socket_server_send(struct socket_server *ss, int id, const void * buffer, int sz s->dw_buffer = buffer; s->dw_size = sz; s->dw_offset = n; - sp_write(ss->event_fd, s->fd, s, true); spinlock_unlock(&s->dw_lock); + + sp_write(ss->event_fd, s->fd, s, true); return 0; } spinlock_unlock(&s->dw_lock);