328 Commits

Author SHA1 Message Date
Bert Belder
093e6f5240 api: explicitly check handle validity in epoll_close() 2017-12-07 22:03:45 +01:00
Bert Belder
157cadf4e4 api: always check handle validity when epoll_ctl_mod() fails 2017-12-07 22:00:11 +01:00
Bert Belder
d448bdf8d8 error: make err_check_handle() an internal api 2017-12-07 21:37:58 +01:00
Bert Belder
097e4fef9a port: epoll_ctl() to report EBADF when both op and sock are invalid 2017-12-07 19:07:01 +01:00
Bert Belder
b5864f3a0f afd: report EPERM+ERROR_DEVICE_FEATURE_NOT_SUPPORTED for non-afd sockets 2017-12-07 18:01:49 +01:00
Bert Belder
42ccc11634 src: suppress warnings caused by Windows SDK headers 2017-12-07 04:42:37 +01:00
Bert Belder
99ce867424 src: polyfill the 'include' keyword for Visual Studio 2013 2017-12-07 04:41:51 +01:00
Bert Belder
f260365c45 port: plug memory leak where deleted socket would never be freed 2017-12-05 20:04:41 +01:00
Bert Belder
05bad1e58b sock: move poll cancellation to _ep_sock_cancel_poll() 2017-12-05 20:04:41 +01:00
Bert Belder
eecfb0e5e3 port: make ep_port_release_poll_group() signature consistent 2017-12-05 20:04:41 +01:00
Bert Belder
50f84cdc6b port: refactor socket update queue 2017-12-05 20:04:35 +01:00
Bert Belder
e5a8d83c8b api: epoll_ctl() to return ENOTSOCK when sock argument is not a socket 2017-12-05 05:02:57 +01:00
Bert Belder
4159a14364 afd: make afd_get_protocol() error reporting more accurate 2017-12-05 04:47:59 +01:00
Bert Belder
283aa5fe76 error: map ERROR_NOT_SUPPORTED to EPERM 2017-12-05 04:46:30 +01:00
Bert Belder
a2f6609d57 api: report EINVAL if epoll_wait() is called with invalid maxevents 2017-12-04 23:21:39 +01:00
Bert Belder
11d7a0395f api: report EINVAL when ephnd is a valid handle but not an epoll instance 2017-12-04 21:04:58 +01:00
Bert Belder
d5b5b605c0 api: epoll_ctl_mod() report EBADF when modifying/deleting invalid socket 2017-12-04 21:03:59 +01:00
Bert Belder
d83871797c error: add return_handle_error(value, handle, [error]) macro
This macro validates that `handle` is valid. If `handle` is valid, it
behaves just like `return_error(value, [error])`. If `handle` is
invalid, it sets errno to EBADF and GetLastError() returns
ERROR_INVALID_HANDLE.
2017-12-04 21:00:44 +01:00
Bert Belder
dc1369886d error: map ERROR_*_SYSTEM_RESOURCES to ENOMEM 2017-12-04 20:06:39 +01:00
Bert Belder
69a297fd22 port: properly propagate CreateIoCompletionPort() error 2017-12-04 20:06:16 +01:00
Bert Belder
981b3caf4e api: epoll_create() and epoll_create1() should return NULL on failure 2017-12-04 20:04:30 +01:00
Bert Belder
49f73f6723 sock: list out known epoll event types 2017-12-03 23:13:01 +01:00
Bert Belder
f7e15f1ba8 reflock-tree: remove unnecessary casts 2017-12-03 19:09:32 +01:00
Bert Belder
b3335d9c19 src: remove unnecessary #ifndef from regular/internal.h 2017-12-03 19:01:03 +01:00
Bert Belder
63d3e3b2bc src: merge ntstatus.h into nt.h 2017-12-03 18:58:43 +01:00
Bert Belder
ddb8bfc9d6 sock: properly detect closed sockets when EPOLLONESHOT is set 2017-12-03 18:15:22 +01:00
Bert Belder
c4756004e0 build: rename 'all-in-one' to 'combined', store in 'dist/' 2017-11-30 23:33:45 +01:00
Bert Belder
f5f606e8b9 src: remove unnecessary wpoll.h includes 2017-11-24 18:07:05 +01:00
Bert Belder
e55a7612b7 sock: disable all events after EPOLLONESHOT event 2017-11-23 03:00:26 +01:00
Bert Belder
2a7c6ded9e sock: set the right epoll events on AFD_POLL_DISCONNECT 2017-11-23 03:00:21 +01:00
Bert Belder
742cc8c7fa sock: merge if branches for AFD_POLL_SEND and AFD_POLL_CONNECT 2017-11-23 03:00:21 +01:00
Bert Belder
0e767efc0b nt: remove STATUS_SEVERITY_* definitions 2017-11-21 17:10:10 +01:00
Bert Belder
a9aec85220 src: have separate internal.h for regular vs all-in-one build 2017-11-21 15:58:19 +01:00
Bert Belder
2fc0bafb49 src: rename preprocessor constants 2017-11-21 15:04:37 +01:00
Bert Belder
eb673e3fed all: rename the project to 'wepoll' 2017-09-28 00:12:20 +02:00
Bert Belder
955ca5d222 error: remove dead code from _return_error_helper() 2017-09-27 17:13:59 +02:00
Bert Belder
4eb7441254 error.h: place macros above function declarations 2017-09-27 17:13:59 +02:00
Bert Belder
01c82b9364 error: prefix internal APIs with 'err_' rather than 'we_' 2017-09-27 17:13:59 +02:00
Bert Belder
347ad5399e error: shrink the error-to-errno map 2017-09-27 17:13:54 +02:00
Bert Belder
aad7c9151e afd: use RtlNtStatusToDosError to map NTSTATUS to error code 2017-09-27 17:05:34 +02:00
Bert Belder
8188c3df79 ntstatus: remove some unused definitions 2017-09-26 21:20:03 +02:00
Bert Belder
20e76abf32 nt: declarators -> attributes 2017-09-26 21:18:42 +02:00
Bert Belder
e3dda41f53 util: consistent naming 2017-09-26 21:14:44 +02:00
Bert Belder
d99e748ef8 sock: remove ep_sock_from_overlapped() internal API 2017-09-26 21:12:28 +02:00
Bert Belder
ba8823ad87 init: make global initialization thread-safe 2017-09-26 02:14:53 +02:00
Bert Belder
3642064c17 util: reorder the flavors of container_of 2017-09-26 02:14:53 +02:00
Bert Belder
809a6d84bf sock: remove ep_sock_find_in_tree() internal api 2017-09-26 02:14:53 +02:00
Bert Belder
3151f51417 port: improve _ep_port_feed_events() readability 2017-09-26 02:14:53 +02:00
Bert Belder
9a3952cdfb port: bump max completions that may be received from an IOCP port 2017-09-26 02:14:53 +02:00
Bert Belder
7b43e9c9f0 tree: don't set error on failure, this is the caller's responsibility 2017-09-25 20:35:48 +02:00
Bert Belder
562bf271df src: name header guard #defines consistently 2017-09-25 20:35:47 +02:00
Bert Belder
b61fd61008 src: rename epoll-socket.* to sock.* 2017-09-25 20:35:47 +02:00
Bert Belder
fa10bfc829 api: move epoll_xxx functions to api.c 2017-09-25 20:35:41 +02:00
Bert Belder
4ea40313be epoll: epoll_create(1) to match linux API more closely 2017-09-25 19:54:20 +02:00
Bert Belder
929ea10ebd port: immediately update poll set when other threads are polling 2017-09-25 19:42:01 +02:00
Bert Belder
729fa3c733 port: move IOCP port creation to ep_port_new() 2017-09-25 19:32:13 +02:00
Bert Belder
a6c2c49071 port: make ep_port_ctl() thread-safe 2017-09-25 19:26:40 +02:00
Bert Belder
851a5d7346 port: move ep_port_ctl() to port.c 2017-09-25 19:25:30 +02:00
Bert Belder
e37f4b2ccb port: make ep_port_wait() thread-safe 2017-09-25 19:18:13 +02:00
Bert Belder
d3a69678cf port: move ep_port_wait() to port.c 2017-09-25 19:17:58 +02:00
Bert Belder
d285bcfab7 epoll: break up _ep_wait() into two functions 2017-09-25 19:12:04 +02:00
Bert Belder
e4f213007f epoll: epoll_wait() should check whether maxevents is valid 2017-09-25 19:09:51 +02:00
Bert Belder
6629ae68b5 port: ep_port_feed_events() should return int not size_t 2017-09-25 19:08:25 +02:00
Bert Belder
fddb30bfd8 port: make ep_port_close() thread-safe 2017-09-25 18:35:37 +02:00
Bert Belder
258bc13100 port: make ep_port_delete() thread-safe 2017-09-25 18:35:37 +02:00
Bert Belder
7476633975 port: add a per-port lock 2017-09-25 18:35:36 +02:00
Bert Belder
f1383cadfd port: un-DRY closing IOCP port, don't fail delete if CloseHandle fails 2017-09-25 18:35:30 +02:00
Bert Belder
45728a1e90 api: reference the epoll port by windows HANDLE 2017-09-25 18:15:17 +02:00
Bert Belder
fd83d12648 port: move closing the IOCP port to it's own internal API 2017-09-25 18:15:17 +02:00
Bert Belder
3c2c4bfce7 api: use HANDLE and SOCKET types instead of their underlying types 2017-09-25 18:15:17 +02:00
Bert Belder
16f62017ba epoll: add global init function 2017-09-25 18:15:06 +02:00
Bert Belder
049a7b8be2 reflock-tree: add mechanism for pointer-safe tree lookups 2017-09-25 17:53:11 +02:00
Bert Belder
b9f4578a96 socket: use safe_container_of() in ep_sock_find_in_tree() 2017-09-25 17:52:08 +02:00
Bert Belder
1e24f44238 util: add safe_container_of() macro definition 2017-09-25 17:51:43 +02:00
Bert Belder
bb23a2b9f0 reflock: make it much simpler 2017-09-25 17:51:03 +02:00
Bert Belder
73d22b4419 init: rename global init functions to be more explicit 2017-09-23 14:05:35 +02:00
Bert Belder
6029e38d79 reflock: first version of combined reference counter and lock 2017-09-23 14:05:30 +02:00
Bert Belder
4a0354a6d2 nt: add definitions for keyed event support 2017-09-23 13:58:20 +02:00
Bert Belder
773d9cace3 util: add static_assert() polyfill for clang 2017-09-23 13:58:20 +02:00
Bert Belder
91cb493efc poll-group: use new queue APIs to move groups inside the allocator queue 2017-09-14 16:41:17 +02:00
Bert Belder
048d2cc363 queue: add internal queue_move_first() and queue_move_last() APIs 2017-09-14 16:41:16 +02:00
Bert Belder
34df608b98 queue: move implementation from header to queue.c 2017-09-14 16:41:16 +02:00
Bert Belder
2a8fd0f5a2 epoll: rename definition to _EPOLL_MAX_COMPLETION_COUNT 2017-09-14 16:41:16 +02:00
Bert Belder
3705120f2c epoll: merge all public APIs into epoll.c 2017-09-14 16:41:16 +02:00
Bert Belder
b2c69365e8 port: make ep_port_(add|del)_socket take ep_sock_t instead of tree_node_t 2017-09-14 16:41:16 +02:00
Bert Belder
0274e9d46b port: add internal ep_port_find_socket() API 2017-09-14 16:41:16 +02:00
Bert Belder
cc3bcb8490 port: move implementation to port.c 2017-09-14 16:41:16 +02:00
Bert Belder
4c049baaf5 socket: rename ep_sock_find() to ep_sock_find_in_tree() 2017-09-14 16:41:16 +02:00
Bert Belder
565ded935d tree: allow keys with value zero 2017-09-14 16:41:16 +02:00
Bert Belder
cd7669ef66 src: move AFD functions to afd.c, rewrite ep_sock initialization 2017-09-14 16:41:11 +02:00
Bert Belder
83efbfe2c7 epoll: add omitted 'static' keyword 2017-09-14 14:08:50 +02:00
Bert Belder
6363abe641 socket: get rid of _ep_sock_maybe_free() 2017-09-14 04:34:13 +02:00
Bert Belder
ec539fadfc socket: cancel poll request when socket is deleted w/ EPOLL_CTL_DEL 2017-09-14 04:34:12 +02:00
Bert Belder
34a9a4d4a7 poll-group: rename user_count to group_size 2017-09-14 04:34:12 +02:00
Bert Belder
dc742fa01e poll-group: rename _DS_MAX_USERS to _POLL_GROUP_MAX_SIZE 2017-09-14 04:06:18 +02:00
Bert Belder
427e0a0209 socket: use actual enum type for poll_status field 2017-09-14 03:54:54 +02:00
Bert Belder
0938dfda83 socket: make the poll request an integral part of struct ep_sock 2017-09-14 03:54:54 +02:00
Bert Belder
fe967a01a5 socket: make ep_sock_update() more readable 2017-09-14 03:54:54 +02:00
Bert Belder
6037bcf8ab socket: turn the 'deleted' flag into a bitfield 2017-09-14 03:54:49 +02:00
Bert Belder
3af19ec71c socket: get rid of _(set|clear)_latest_poll_req() functions 2017-09-14 03:13:18 +02:00
Bert Belder
022f3fcbd7 socket: rename latest_poll_req_events to pending_events 2017-09-14 03:08:02 +02:00
Bert Belder
bc82503d09 socket: make struct member order more logical 2017-09-14 03:06:33 +02:00
Bert Belder
84e92cbeaa poll-req: make poll_req and ep_sock lifecycles coincide completely 2017-09-14 03:03:37 +02:00
Bert Belder
423e85df94 socket: do not track or use poll_req_count, use poll_status instead 2017-09-14 03:03:12 +02:00
Bert Belder
99ddd49dfe socket: use an enum to track poll { idle, pending, cancelled } status 2017-09-14 03:02:46 +02:00
Bert Belder
6ea33eca54 socket: make ep_sock_update() control flow a little more readable 2017-09-14 03:02:46 +02:00
Bert Belder
0155abf6e2 socket: remove _is_latest_poll_req() 2017-09-14 03:02:45 +02:00
Bert Belder
0bd24cc1e5 port: do not track poll request count 2017-09-14 03:02:45 +02:00
Bert Belder
ee6a1e300a socket: remove unused unused() statement
See what I did there?
2017-09-14 03:02:45 +02:00
Bert Belder
b4aeb52a6b poll-request: fix typo in poll_req_cancel() 2017-09-14 03:02:45 +02:00
Bert Belder
c4f9f5c3d7 epoll: drop include <stdio.h> 2017-09-14 01:45:41 +02:00
Bert Belder
a8807482b2 port: free the port through _ep_port_free() 2017-09-14 00:56:22 +02:00
Bert Belder
45aaa10a62 poll-group: use 1 driver socket per N sockets, vs. 1 for *all* sockets 2017-09-14 00:55:01 +02:00
Bert Belder
1ad0497c9c poll-request: don't use exclusive polls now that we can cancel old ones 2017-09-14 00:55:01 +02:00
Bert Belder
43c159a576 port: when closing, use ep_sock_force_delete() instead of draining 2017-09-14 00:55:01 +02:00
Bert Belder
258ce95f79 socket: add ep_sock_force_delete() 2017-09-14 00:55:00 +02:00
Bert Belder
caade91a1a socket: never have more than one outstanding poll request
Instead, use the new poll_req_cancel() API to cancel poll requests that
are outdated, then submit a new poll request after they return.
2017-09-14 00:53:25 +02:00
Bert Belder
f2580ab432 socket: fix serious bug/typo in ep_sock_find() 2017-09-14 00:53:24 +02:00
Bert Belder
153bc1138a socket: fix EPOLLONESHOT semantics
When EPOLLONESHOT is specified, rather than deleting the socket, just
clear it's event mask.
2017-09-14 00:53:13 +02:00
Bert Belder
530da04ede socket: make comparison with zero explicit 2017-09-14 00:53:13 +02:00
Bert Belder
b4ca2e330b poll-request: implement poll_req_cancel() 2017-09-14 00:53:07 +02:00
Bert Belder
3696de480a socket: set _EP_SOCK_DELETED immediately after checking it 2017-09-14 00:53:07 +02:00
Bert Belder
4f16b267ad socket: make ep_sock_delete() return void 2017-09-14 00:53:01 +02:00
Bert Belder
eaec721f0c ntstatus: add definition for STATUS_CANCELLED 2017-09-14 00:49:23 +02:00
Bert Belder
6e92f49be1 afd: name afd_poll() arguments more clearly 2017-09-11 17:23:42 +02:00
Bert Belder
02dceacbe3 port: move epoll_(create|close) public APIs to api.c 2017-09-11 17:14:43 +02:00
Bert Belder
6448bd2203 socket: move socket assignment to ep_sock constructor 2017-09-11 17:13:18 +02:00
Bert Belder
184ba5b0e0 init: move global initialization to init.c 2017-09-11 15:18:12 +02:00
Bert Belder
7f8cdf7448 epoll: remove unused declaration 2017-09-11 03:51:48 +02:00
Bert Belder
eff08efcb8 socket: refactor lookup logic 2017-09-11 03:51:48 +02:00
Bert Belder
c4f2b71db4 tree: rename handle_tree -> tree 2017-09-11 03:51:47 +02:00
Bert Belder
4dd57efc8b rb: rename tree.h -> rb.h 2017-09-11 03:51:47 +02:00
Bert Belder
854f8a552c src: use 'queue_node' and 'tree_node' only 2017-09-11 03:51:47 +02:00
Bert Belder
1f795ae60f port: manipulate request count through ep_port_(add|del)_req 2017-09-11 03:51:43 +02:00
Bert Belder
4d9a24a708 queue: re-implement 2017-09-11 01:29:45 +02:00
Bert Belder
4568ce69d8 socket: refactor ep_sock delete/free flow 2017-09-11 01:26:44 +02:00
Bert Belder
8237c57951 port: rename internal APIs 2017-09-10 21:00:06 +02:00
Bert Belder
894b48b2bd tree: drop ARGSUSED comments 2017-09-10 20:51:11 +02:00
Bert Belder
d06696ee78 tree: remove RB_AUGMENT calls 2017-09-10 20:40:44 +02:00
Bert Belder
d36adf242a socket: simplify update queue management 2017-09-10 20:40:44 +02:00
Bert Belder
ddb39a9ab6 queue: add QUEUE_ENQUEUED() to determine if an element is in a queue 2017-09-10 20:40:44 +02:00
Bert Belder
dfab856583 queue: rename QUEUE_ADD to QUEUE_MERGE
The old name was really confusing.
2017-09-10 20:40:44 +02:00
Bert Belder
e64b96542e queue: prefix private macros with underscore 2017-09-10 20:40:44 +02:00
Bert Belder
2b3fddafd1 util: add unused() macro 2017-09-10 20:40:44 +02:00
Bert Belder
bbe28c8729 socket: separate public from private ep_sock_t fields 2017-09-10 20:40:44 +02:00
Bert Belder
9061004ca2 epoll: make assignment in conditional expression palatable to msvc 2017-09-10 20:40:43 +02:00
Bert Belder
2a15b3a371 epoll: fix logic error in epoll_wait() timeout recomputation 2017-09-10 20:40:43 +02:00
Bert Belder
e36129b91b handle-tree: fix potential integer overflow in _handle_tree_compare 2017-09-10 20:40:42 +02:00
Bert Belder
c1e99cb100 handle-tree: avoid clang incomplete initializer warning 2017-09-10 20:40:42 +02:00
Bert Belder
07b5e727a3 error: avoid clang signed/unsigned comparison warning 2017-09-10 20:40:42 +02:00