socket_server: 增加 request_package 初始化, 避免内存工具警告 (#2050)

* socket_server: 增加 request_package 初始化逻辑, 避免内存工具警告

* add request_init function instead of {0}

---------

Co-authored-by: efve.zff <efve.zff@alibaba-inc.com>
This commit is contained in:
EfveZombie
2025-05-21 15:35:57 +08:00
committed by GitHub
parent 94450ff00f
commit b2612d92eb

View File

@@ -163,7 +163,7 @@ struct request_listen {
int id;
int fd;
uintptr_t opaque;
char host[1];
// char host[1];
};
struct request_bind {
@@ -349,7 +349,7 @@ write_buffer_free(struct socket_server *ss, struct write_buffer *wb) {
static void
socket_keepalive(int fd) {
int keepalive = 1;
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive , sizeof(keepalive));
setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepalive , sizeof(keepalive));
}
static int
@@ -366,7 +366,7 @@ reserve_id(struct socket_server *ss) {
if (ATOM_CAS(&s->type, type_invalid, SOCKET_TYPE_RESERVE)) {
s->id = id;
s->protocol = PROTOCOL_UNKNOWN;
// socket_server_udp_connect may inc s->udpconncting directly (from other thread, before new_fd),
// socket_server_udp_connect may inc s->udpconncting directly (from other thread, before new_fd),
// so reset it to 0 here rather than in new_fd.
ATOM_INIT(&s->udpconnecting, 0);
s->fd = -1;
@@ -386,7 +386,7 @@ clear_wb_list(struct wb_list *list) {
list->tail = NULL;
}
struct socket_server *
struct socket_server *
socket_server_create(uint64_t time) {
int i;
int fd[2];
@@ -520,7 +520,7 @@ force_close(struct socket_server *ss, struct socket *s, struct socket_lock *l, s
socket_unlock(l);
}
void
void
socket_server_release(struct socket_server *ss) {
int i;
struct socket_message dummy;
@@ -835,7 +835,7 @@ list_uncomplete(struct wb_list *s) {
struct write_buffer *wb = s->head;
if (wb == NULL)
return 0;
return (void *)wb->ptr != wb->buffer;
}
@@ -901,7 +901,7 @@ send_buffer_(struct socket_server *ss, struct socket *s, struct socket_lock *l,
}
if (s->low.head)
return -1;
}
}
// step 4
assert(send_buffer_empty(s) && s->wb_size == 0);
@@ -1582,9 +1582,9 @@ forward_message_udp(struct socket_server *ss, struct socket *s, struct socket_lo
static int
report_connect(struct socket_server *ss, struct socket *s, struct socket_lock *l, struct socket_message *result) {
int error;
socklen_t len = sizeof(error);
int code = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &error, &len);
if (code < 0 || error) {
socklen_t len = sizeof(error);
int code = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &error, &len);
if (code < 0 || error) {
error = code < 0 ? errno : error;
force_close(ss, s, l, result);
result->data = strerror(error);
@@ -1684,7 +1684,7 @@ report_accept(struct socket_server *ss, struct socket *s, struct socket_message
return 1;
}
static inline void
static inline void
clear_closed_event(struct socket_server *ss, struct socket_message * result, int type) {
if (type == SOCKET_CLOSE || type == SOCKET_ERR) {
int id = result->id;
@@ -1703,7 +1703,7 @@ clear_closed_event(struct socket_server *ss, struct socket_message * result, int
}
// return type
int
int
socket_server_poll(struct socket_server *ss, struct socket_message * result, int * more) {
for (;;) {
if (ss->checkctrl) {
@@ -1781,7 +1781,7 @@ socket_server_poll(struct socket_server *ss, struct socket_message * result, int
--ss->event_index;
}
if (type == -1)
break;
break;
return type;
}
if (e->write) {
@@ -1792,8 +1792,8 @@ socket_server_poll(struct socket_server *ss, struct socket_message * result, int
}
if (e->error) {
int error;
socklen_t len = sizeof(error);
int code = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &error, &len);
socklen_t len = sizeof(error);
int code = getsockopt(s->fd, SOL_SOCKET, SO_ERROR, &error, &len);
const char * err = NULL;
if (code < 0) {
err = strerror(errno);
@@ -1855,9 +1855,15 @@ open_request(struct socket_server *ss, struct request_package *req, uintptr_t op
return len;
}
int
static inline void
request_init(struct request_package *req) {
memset(req, 0, sizeof(*req));
}
int
socket_server_connect(struct socket_server *ss, uintptr_t opaque, const char * addr, int port) {
struct request_package request;
request_init(&request);
int len = open_request(ss, &request, opaque, addr, port);
if (len < 0)
return -1;
@@ -1871,7 +1877,7 @@ can_direct_write(struct socket *s, int id) {
}
// return -1 when error, 0 when success
int
int
socket_server_send(struct socket_server *ss, struct socket_sendbuffer *buf) {
int id = buf->id;
struct socket * s = &ss->slot[HASH_ID(id)];
@@ -1921,6 +1927,7 @@ socket_server_send(struct socket_server *ss, struct socket_sendbuffer *buf) {
socket_unlock(&l);
struct request_package request;
request_init(&request);
request.u.send.id = id;
request.u.send.sz = 0;
request.u.send.buffer = NULL;
@@ -1936,6 +1943,7 @@ socket_server_send(struct socket_server *ss, struct socket_sendbuffer *buf) {
inc_sending_ref(s, id);
struct request_package request;
request_init(&request);
request.u.send.id = id;
request.u.send.buffer = clone_buffer(buf, &request.u.send.sz);
@@ -1944,7 +1952,7 @@ socket_server_send(struct socket_server *ss, struct socket_sendbuffer *buf) {
}
// return -1 when error, 0 when success
int
int
socket_server_send_lowpriority(struct socket_server *ss, struct socket_sendbuffer *buf) {
int id = buf->id;
@@ -1957,6 +1965,7 @@ socket_server_send_lowpriority(struct socket_server *ss, struct socket_sendbuffe
inc_sending_ref(s, id);
struct request_package request;
request_init(&request);
request.u.send.id = id;
request.u.send.buffer = clone_buffer(buf, &request.u.send.sz);
@@ -1967,12 +1976,14 @@ socket_server_send_lowpriority(struct socket_server *ss, struct socket_sendbuffe
void
socket_server_exit(struct socket_server *ss) {
struct request_package request;
request_init(&request);
send_request(ss, &request, 'X', 0);
}
void
socket_server_close(struct socket_server *ss, uintptr_t opaque, int id) {
struct request_package request;
request_init(&request);
request.u.close.id = id;
request.u.close.shutdown = 0;
request.u.close.opaque = opaque;
@@ -1983,6 +1994,7 @@ socket_server_close(struct socket_server *ss, uintptr_t opaque, int id) {
void
socket_server_shutdown(struct socket_server *ss, uintptr_t opaque, int id) {
struct request_package request;
request_init(&request);
request.u.close.id = id;
request.u.close.shutdown = 1;
request.u.close.opaque = opaque;
@@ -2052,13 +2064,14 @@ do_listen(const char * host, int port, int backlog) {
return listen_fd;
}
int
int
socket_server_listen(struct socket_server *ss, uintptr_t opaque, const char * addr, int port, int backlog) {
int fd = do_listen(addr, port, backlog);
if (fd < 0) {
return -1;
}
struct request_package request;
request_init(&request);
int id = reserve_id(ss);
if (id < 0) {
close(fd);
@@ -2074,6 +2087,7 @@ socket_server_listen(struct socket_server *ss, uintptr_t opaque, const char * ad
int
socket_server_bind(struct socket_server *ss, uintptr_t opaque, int fd) {
struct request_package request;
request_init(&request);
int id = reserve_id(ss);
if (id < 0)
return -1;
@@ -2087,6 +2101,7 @@ socket_server_bind(struct socket_server *ss, uintptr_t opaque, int fd) {
void
socket_server_start(struct socket_server *ss, uintptr_t opaque, int id) {
struct request_package request;
request_init(&request);
request.u.resumepause.id = id;
request.u.resumepause.opaque = opaque;
send_request(ss, &request, 'R', sizeof(request.u.resumepause));
@@ -2095,6 +2110,7 @@ socket_server_start(struct socket_server *ss, uintptr_t opaque, int id) {
void
socket_server_pause(struct socket_server *ss, uintptr_t opaque, int id) {
struct request_package request;
request_init(&request);
request.u.resumepause.id = id;
request.u.resumepause.opaque = opaque;
send_request(ss, &request, 'S', sizeof(request.u.resumepause));
@@ -2103,20 +2119,21 @@ socket_server_pause(struct socket_server *ss, uintptr_t opaque, int id) {
void
socket_server_nodelay(struct socket_server *ss, int id) {
struct request_package request;
request_init(&request);
request.u.setopt.id = id;
request.u.setopt.what = TCP_NODELAY;
request.u.setopt.value = 1;
send_request(ss, &request, 'T', sizeof(request.u.setopt));
}
void
void
socket_server_userobject(struct socket_server *ss, struct socket_object_interface *soi) {
ss->soi = *soi;
}
// UDP
int
int
socket_server_udp(struct socket_server *ss, uintptr_t opaque, const char * addr, int port) {
int fd;
int family;
@@ -2141,12 +2158,13 @@ socket_server_udp(struct socket_server *ss, uintptr_t opaque, const char * addr,
return -1;
}
struct request_package request;
request_init(&request);
request.u.udp.id = id;
request.u.udp.fd = fd;
request.u.udp.opaque = opaque;
request.u.udp.family = family;
send_request(ss, &request, 'U', sizeof(request.u.udp));
send_request(ss, &request, 'U', sizeof(request.u.udp));
return id;
}
@@ -2172,6 +2190,7 @@ socket_server_udp_listen(struct socket_server *ss, uintptr_t opaque, const char*
return -1;
}
struct request_package request;
request_init(&request);
request.u.udp.id = id;
request.u.udp.fd = fd;
request.u.udp.opaque = opaque;
@@ -2223,6 +2242,7 @@ socket_server_udp_dial(struct socket_server *ss, uintptr_t opaque, const char* a
}
struct request_package request;
request_init(&request);
request.u.dial_udp.id = id;
request.u.dial_udp.fd = fd;
request.u.dial_udp.opaque = opaque;
@@ -2236,7 +2256,7 @@ socket_server_udp_dial(struct socket_server *ss, uintptr_t opaque, const char* a
return id;
}
int
int
socket_server_udp_send(struct socket_server *ss, const struct socket_udp_address *addr, struct socket_sendbuffer *buf) {
int id = buf->id;
struct socket * s = &ss->slot[HASH_ID(id)];
@@ -2289,6 +2309,7 @@ socket_server_udp_send(struct socket_server *ss, const struct socket_udp_address
}
struct request_package request;
request_init(&request);
request.u.send_udp.send.id = id;
request.u.send_udp.send.buffer = clone_buffer(buf, &request.u.send_udp.send.sz);
@@ -2329,6 +2350,7 @@ socket_server_udp_connect(struct socket_server *ss, int id, const char * addr, i
return -1;
}
struct request_package request;
request_init(&request);
request.u.set_udp.id = id;
int protocol;