317 Commits

Author SHA1 Message Date
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
Bert Belder
196e807223 epoll: remove free_io_req logic 2017-09-10 20:39:11 +02:00
Bert Belder
65d44c9d7e epoll: split up epoll_ctl() implementation 2017-09-04 09:33:16 +02:00
Bert Belder
7baf2c9e73 epoll: rename stuff again 2017-09-04 09:19:11 +02:00
Bert Belder
815e6faf0a tree: remove CONSTCOND tags 2017-09-04 08:59:57 +02:00
Bert Belder
620a2108a2 afd: add IrDA provider guid 2017-09-04 07:58:13 +02:00
Bert Belder
8808304888 afd: rename and restyle msafd provider guid list, add labels 2017-09-04 07:56:52 +02:00
Bert Belder
5e93699a41 nt: do not re-load ntdll.dll
It's loaded into every process anyway.
2017-09-04 07:30:37 +02:00
Bert Belder
52dbb3f2a2 epoll: use container_of() instead of CONTAINING_RECORD() 2017-09-04 07:27:28 +02:00
Bert Belder
45afb2268e util: add container_of() macro 2017-09-04 07:27:11 +02:00
Bert Belder
0cd8b52b18 src: use int foo(void) for functions that don't take parameters 2017-09-04 07:20:59 +02:00
Bert Belder
2cd69e976a epoll: return proper (windows+errno) error codes 2017-09-04 07:20:59 +02:00
Bert Belder
1949b8f044 afd: use windows (and not winsock) error codes 2017-09-04 07:20:59 +02:00
Bert Belder
e967c93dad error: add return_error() and return_success() helper macros 2017-09-04 07:20:58 +02:00
Bert Belder
f353ab429e error: add we_set_win_error() and we_clear_win_error() apis 2017-09-04 06:37:17 +02:00
Bert Belder
d7586179eb error: redo and simplify error mapping functions 2017-09-04 06:37:13 +02:00
Bert Belder
e37ee111b1 error: slim down the error map 2017-09-04 05:50:53 +02:00
Bert Belder
e06d6555f6 nt: dynamically import RtlNtStatusToDosError 2017-09-04 05:08:38 +02:00
Bert Belder
6a92d5e905 nt: put parentheses around parameter list in X macro 2017-09-04 05:07:25 +02:00
Bert Belder
8520557b03 style: remove _s suffix from struct names 2017-09-04 00:48:28 +02:00
Bert Belder
e7673137be util: s/ARRAY_COUNT/array_count/ 2017-09-04 00:37:28 +02:00
Bert Belder
f2cc02abc0 util: move definitions to util.h 2017-09-04 00:35:04 +02:00
Bert Belder
7de1d61227 afd: clean up header, move some definitions 2017-09-03 23:41:37 +02:00
Bert Belder
d7d3a80bdd afd: separate out afd_poll implementation 2017-09-03 23:41:28 +02:00
Bert Belder
d6cbb73f4e nt: separate out ntdll.dll dynamic import logic 2017-09-03 23:39:47 +02:00
Bert Belder
3319986f74 nt: move ntstatus related definitions to ntstatus.h 2017-09-03 23:39:14 +02:00
Bert Belder
7b253d0cf4 nt.h: delete the bulk of NTSTATUS constants 2017-09-03 20:55:37 +02:00
Bert Belder
e910b2bc72 src: include windows headers in a central location 2017-09-03 20:55:37 +02:00
Bert Belder
0c20d49e2f src: rename some files 2017-09-03 20:55:37 +02:00
Bert Belder
eef4a2ef44 epoll.c: use new error-mapping facility 2017-09-03 20:55:31 +02:00
Bert Belder
22f02b1e01 src: add facility for mapping between ntstatus, win(sock), c errors 2017-09-03 18:59:06 +02:00
Bert Belder
0c7098fb47 epoll.c: remove unnecessary code 2017-09-01 19:29:46 +02:00
Bert Belder
7f7d1240ae epoll.c: fix warning about potentially uninitialized variable 2017-09-01 19:29:46 +02:00
Bert Belder
32a13c094c epoll.c: use CreateEventW explicitly 2017-09-01 19:29:45 +02:00
Bert Belder
5162f578ab epoll.c: wrap assignment-in-conditional in double parentheses 2017-09-01 19:29:45 +02:00
Bert Belder
f5633093df epoll.c: use size_t for array index counter 2017-09-01 19:29:45 +02:00
Bert Belder
370e1b79e2 epoll.c: ensure ssize_t type is defined 2017-09-01 19:29:45 +02:00
Bert Belder
47ceb5b498 ntapi.h: do away with funky comment style 2017-09-01 19:29:45 +02:00
Bert Belder
c480ec6242 epoll.c: do away with funky comment style 2017-09-01 19:29:45 +02:00
Bert Belder
4815b07fd4 src: capitalize Windows.h 2017-09-01 19:29:45 +02:00
Bert Belder
82e9b9e418 msafd.h: add two definitions from winioctl.h 2017-09-01 19:29:45 +02:00
Bert Belder
2ac38c9f3a epoll.c: add missing malloc.h include 2017-09-01 19:29:45 +02:00
Bert Belder
051b79868d epoll.c: include windows headers 2017-09-01 19:29:45 +02:00
Bert Belder
4263397ef1 header: don't include Winsock2.h and Windows.h 2017-09-01 19:29:44 +02:00
Bert Belder
0904888163 tree.h: mark static functions as unused to avoid clang warning 2017-09-01 19:29:44 +02:00
Bert Belder
76c5e35363 epoll.c: use GetTickCount64() to avoid clock wrapping issues 2017-09-01 19:29:44 +02:00
Bert Belder
f943400618 epoll.c: naming conflict, rename 'op(eration)' to '(io_)req(uest)' 2017-09-01 19:29:44 +02:00
Bert Belder
42a0c6e0f4 structure: put tests in the test/ folder 2017-09-01 19:29:39 +02:00
Bert Belder
c2fff82c25 test: fix the test somewhat 2017-09-01 19:29:39 +02:00
k0zmo
12b29d1177 epoll.c: fix re-listing polled sockets 2017-09-01 19:29:39 +02:00
Bert Belder
83ef29e49a src: epoll.h is not a system header 2017-09-01 19:29:39 +02:00
Bert Belder
005581d797 style: format all sources 2017-09-01 19:29:39 +02:00
Bert Belder
c7ebd8f042 style: add clang-format style rules 2017-09-01 19:29:39 +02:00
Bert Belder
828de8474b ntapi.h: remove DUMMYUNIONNAME annotation 2017-09-01 19:22:18 +02:00
Bert Belder
f020adf547 Move attention queue management to the right spot 2012-09-06 06:25:00 +02:00
Bert Belder
6f82a912e5 Fix inappropriate return value for epoll_create 2012-09-06 05:52:24 +02:00
Bert Belder
5f55c930d8 Fix tree corruption 2012-09-06 05:52:10 +02:00
Bert Belder
018cbff4b1 Use SIO_BASE_HANDLE to bypass LSPs 2012-09-06 05:03:54 +02:00
Bert Belder
fd94013fc2 s/attn/attn_list/ 2012-09-06 04:55:08 +02:00
Bert Belder
503e0bca69 More WIP 2012-09-06 04:20:37 +02:00
Bert Belder
4c2fb9914a s/wpoll/epoll/g 2012-09-06 02:37:37 +02:00
Bert Belder
a1aa2c7d80 WIP 2012-09-06 02:28:12 +02:00
Bert Belder
0d07f24236 start working on test 2012-08-29 05:14:00 +02:00
Bert Belder
39e68401ce WIP 2012-08-29 04:39:12 +02:00
Bert Belder
c3f7e36acb WIP 2012-08-25 04:35:43 +02:00
Bert Belder
b45fca6328 more skeletton 2012-08-25 03:44:04 +02:00
Bert Belder
214de4db8d Add tree.h from FreeBSD 2012-08-24 16:24:50 +02:00
Bert Belder
51a59be139 Skeletton 2012-08-24 16:10:16 +02:00