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
Bert Belder
0ac3c921bd
src: decorate internal APIs with EPOLL_INTERNAL
2017-09-10 20:40:42 +02:00
Bert Belder
3d1bae5073
epoll: move the socket lookup tree to it's own file
2017-09-10 20:39:49 +02:00
Bert Belder
0d941fd52a
epoll: split out socket related code
2017-09-10 20:39:42 +02:00
Bert Belder
1a8c20ef36
tree.h: remove splay
2017-09-10 20:39:42 +02:00
Bert Belder
91069b2271
epoll: split out poll request functions into poll-request.[ch]
2017-09-10 20:39:36 +02:00
Bert Belder
89099e3103
src: major refactor
2017-09-10 20:39:19 +02:00
Bert Belder
67265bf826
epoll.c: move epoll_create() implementation further down
2017-09-10 20:39:18 +02:00
Bert Belder
37a36ea741
epoll: mark local functions static
2017-09-10 20:39:18 +02:00
Bert Belder
b0586e2fe7
epoll: factor out _ep_get_related_sockets()
2017-09-10 20:39:18 +02:00
Bert Belder
ee6ba5e849
epoll: move smaller _ep_sock_data fields to the bottom
2017-09-10 20:39:18 +02:00
Bert Belder
667b9a4b1d
epoll: use epoll_data_t for per-socket user data field
2017-09-10 20:39:18 +02:00