epoll.c: move epoll_create() implementation further down

This commit is contained in:
Bert Belder 2017-09-04 12:51:08 +02:00
parent 37a36ea741
commit 67265bf826

View File

@ -94,38 +94,9 @@ static inline void _ep_io_req_free(_ep_io_req_t* io_req) {
free(io_req);
}
epoll_t epoll_create(void) {
_ep_port_data_t* port_data;
HANDLE iocp;
/* If necessary, do global initialization first. This is totally not
* thread-safe at the moment.
*/
if (!_ep_initialized) {
if (_ep_initialize() < 0)
return NULL;
_ep_initialized = 1;
}
port_data = malloc(sizeof *port_data);
if (port_data == NULL)
return_error(NULL, ERROR_NOT_ENOUGH_MEMORY);
iocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
if (iocp == INVALID_HANDLE_VALUE) {
free(port_data);
return_error(NULL);
}
port_data->iocp = iocp;
port_data->attn_list = NULL;
port_data->pending_reqs_count = 0;
memset(&port_data->peer_sockets, 0, sizeof port_data->peer_sockets);
RB_INIT(&port_data->sock_data_tree);
return (epoll_t) port_data;
}
static int _ep_get_related_sockets(_ep_port_data_t* port_data,
SOCKET sock,
@ -490,6 +461,39 @@ int epoll_wait(epoll_t port_handle,
return_success(0);
}
epoll_t epoll_create(void) {
_ep_port_data_t* port_data;
HANDLE iocp;
/* If necessary, do global initialization first. This is totally not
* thread-safe at the moment.
*/
if (!_ep_initialized) {
if (_ep_initialize() < 0)
return NULL;
_ep_initialized = 1;
}
port_data = malloc(sizeof *port_data);
if (port_data == NULL)
return_error(NULL, ERROR_NOT_ENOUGH_MEMORY);
iocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0);
if (iocp == INVALID_HANDLE_VALUE) {
free(port_data);
return_error(NULL);
}
port_data->iocp = iocp;
port_data->attn_list = NULL;
port_data->pending_reqs_count = 0;
memset(&port_data->peer_sockets, 0, sizeof port_data->peer_sockets);
RB_INIT(&port_data->sock_data_tree);
return (epoll_t)port_data;
}
int epoll_close(epoll_t port_handle) {
_ep_port_data_t* port_data;
_ep_sock_data_t* sock_data;