| Commit message (Collapse) | Author | Age |
| |
|
| |
|
| |
|
| |
|
|\
| |
| | |
Expose the fd in grpc_fd and grpc_tcp.
|
| |
| |
| |
| | |
Fixes a bug where grpc_fd::released was not initialized.
|
|/ |
|
|\ |
|
| | |
|
| | |
|
| | |
|
|/ |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|\
| |
| |
| |
| | |
Conflicts:
Makefile
|
| | |
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently, if two threads call grpc_completion_queue_pluck on the same
completion queue for different tags, there is a 50% chance that we
deliver the completion wakeup to the wrong poller - forcing the correct
poller to wait until its polling times out before it can return an event
up to the application.
This change tweaks our polling interfaces so that we can indeed wake a
specific poller.
Nothing has been performance tuned yet. It's definitely sub-optimal in a
number of places. Wakeup file-descriptors should be recycled. We should
have a path that avoids calling poll() followed by epoll(). We can
probably live without it right at the second though.
This code will fail on Windows at least (I'll do that port when I'm in the office and have a Windows
machine).
|
| |
|
| |
|
| |
|
| |
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
Makefile
src/core/iomgr/pollset_posix.c
src/core/surface/call.c
src/core/surface/channel.c
src/core/surface/server.c
src/python/src/grpc/_adapter/_low_test.py
tools/doxygen/Doxyfile.core.internal
|
| |\
| | |
| | |
| | |
| | |
| | | |
Conflicts:
src/core/iomgr/fd_posix.h
src/core/iomgr/iomgr.c
|
|\| | |
|
| | |
| | |
| | |
| | |
| | | |
This allows a list of them to be dumped to isolate where memory leaks
are occuring.
|
| | | |
|
|/ / |
|
| | |
|
| | |
|
| | |
|
|/
|
|
|
| |
alarm_test, tcp_posix, fd_posix, pollset_posix, credentials, call,
channel, server, child_channel
|
|
|
|
| |
Update some code based on that documentation
|
|
|
|
|
|
| |
- admit only one poller for read and one for write at a time
(poll is level triggered, so this avoids a thundering herd on each event)
- wake only one poller when more pollers are needed, again avoiding a thundering herd
|
| |
|
|
|
|
|
|
|
|
|
|
| |
We now pass down pointers to closures instead of (callback, arg) pair
elements separately. This allows us to store one word atomically, fixing
a race condition.
All call sites have been updated to the new API. No new allocations are
incurred. grpc_fd_state is deleted to avoid any temptation to ever add
anything there again.
|
| |
|
| |
|
|
|
|
| |
Change the fd watcher from being O(active_pollers) to O(1), reducing time spent under the fd->watcher_mu lock, and ultimately scaling us much better.
|