mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-24 03:53:09 +00:00
bugfix: don't call skynet_free directly when send failed
This commit is contained in:
@@ -107,7 +107,6 @@ skynet_socket_poll() {
|
||||
static int
|
||||
check_wsz(struct skynet_context *ctx, int id, void *buffer, int64_t wsz) {
|
||||
if (wsz < 0) {
|
||||
skynet_free(buffer);
|
||||
return -1;
|
||||
} else if (wsz > 1024 * 1024) {
|
||||
int kb4 = wsz / 1024 / 4;
|
||||
|
||||
@@ -1286,11 +1286,19 @@ socket_server_connect(struct socket_server *ss, uintptr_t opaque, const char * a
|
||||
return request.u.open.id;
|
||||
}
|
||||
|
||||
static void
|
||||
free_buffer(struct socket_server *ss, const void * buffer, int sz) {
|
||||
struct send_object so;
|
||||
send_object_init(ss, &so, (void *)buffer, sz);
|
||||
so.free_func((void *)buffer);
|
||||
}
|
||||
|
||||
// return -1 when error
|
||||
int64_t
|
||||
socket_server_send(struct socket_server *ss, int id, const void * buffer, int sz) {
|
||||
struct socket * s = &ss->slot[HASH_ID(id)];
|
||||
if (s->id != id || s->type == SOCKET_TYPE_INVALID) {
|
||||
free_buffer(ss, buffer, sz);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1307,6 +1315,7 @@ void
|
||||
socket_server_send_lowpriority(struct socket_server *ss, int id, const void * buffer, int sz) {
|
||||
struct socket * s = &ss->slot[HASH_ID(id)];
|
||||
if (s->id != id || s->type == SOCKET_TYPE_INVALID) {
|
||||
free_buffer(ss, buffer, sz);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1489,6 +1498,7 @@ int64_t
|
||||
socket_server_udp_send(struct socket_server *ss, int id, const struct socket_udp_address *addr, const void *buffer, int sz) {
|
||||
struct socket * s = &ss->slot[HASH_ID(id)];
|
||||
if (s->id != id || s->type == SOCKET_TYPE_INVALID) {
|
||||
free_buffer(ss, buffer, sz);
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1507,6 +1517,7 @@ socket_server_udp_send(struct socket_server *ss, int id, const struct socket_udp
|
||||
addrsz = 1+2+16; // 1 type, 2 port, 16 ipv6
|
||||
break;
|
||||
default:
|
||||
free_buffer(ss, buffer, sz);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user