| Commit message (Collapse) | Author | Age |
|\
| |
| | |
Remove extraneous Finish in ExecCtx
|
|\ \
| | |
| | | |
Split lib/support into lib/gpr and lib/gpr++.
|
| |/
|/| |
|
| | |
|
|/
|
| |
s/opitons/options/
|
|
|
|
|
|
|
| |
Rename:
GRPC_LINUX_LEGACY_EPOLL to GRPC_LINUX_EPOLL, and
GRPC_LINUX_EPOLL to GRPC_LINUX_EPOLL_CREATE1
|
|
|
|
|
|
|
|
|
|
|
|
| |
For some reason, the glibc version check does not enable
GRPC_LINUX_EPOLL on manylinux1. This commit:
* Explicitly enables GRPC_LINUX_LEGACY_EPOLL on MANYLINUX1
* Switches the flag to enable epoll1 IO manager to
GRPC_LINUX_LEGACY_EPOLL instead of GRPC_LINUX_EPOLL.
This is to ensure epollex and epollsig that are not yet
compatible with epoll_create (not epoll_create1) do not
get activated unintentionally.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The Python packages built for Linux and uploaded to PyPI are required to
target a standardized platform specification dubbed `manylinux1`, which
tries to cover a vast array of Linux distributions, thereby emulating a
legacy lowest-common-denominator distribution, with an old `glibc` that
does not support `epoll_create1`, but provides the `epoll_create`
interface. While there are race condition risks associated with
utilizing the latter interface and setting the `O_CLOEXEC` flag
immediately on the file descriptor returned by `epoll_create`, the
payoff is well worth the risks for our Python users, who currently end
up falling back on `poll` polling engine when downloading our Linux
binary packages.
|
|\
| |
| | |
change udp_server receive/send buffer size and set SO_RXQ_OVFL
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
|/
|
|
|
| |
Since this socket is used for all incoming traffic, its current buffer
1MB is appearantly too small. Change it to 10 MB for now.
|
|\
| |
| | |
Missing s/NULL/nullptr
|
|\ \
| | |
| | | |
Avoid stall
|
| | | |
|
|\ \ \
| | | |
| | | | |
Merge 1.8.x into master
|
| | | | |
|
| | | | |
|
|\ \ \ \
| | | | |
| | | | | |
Wrap duplicated-name definitions in anonymous namespace (except for iomgr)
|
| |/| | |
|/| | | | |
|
| | | | | |
|
| |_|_|/
|/| | | |
|
| | | | |
|
|/ / /
| | |
| | |
| | | |
This reverts commit 2df509fc0e8628d6d4431139ce953c70796a21eb.
|
| | | |
|
|\| |
| | |
| | |
| | | |
Upmerge v1.8.3 into master
|
| | | |
|
| | |
| | |
| | |
| | | |
created.
|
|\ \ \
| | | |
| | | | |
Typo fix
|
|\ \ \ \
| | | | |
| | | | | |
Fix wrong unreffing of slice
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Add ownership semantic comments to error.h
|
| | | | |\ \
| | | | | | |
| | | | | | | |
Fix a Python spinlock bug
|
| | | | | | | |
|
| |/ / / / /
|/| | | | | |
|
| | | | | | |
|
|\ \ \ \ \ \
| | | | | | |
| | | | | | | |
C++-ize backoff
|
| | | | | | | |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
tc_on_alarm() and on_writable() race, resulting in the following:
```
D1219 08:59:33.425951347 86323 tcp_client_posix.cc:143] CLIENT_CONNECT: ipv4:127.0.0.1:27465: on_writable: error="No Error"
D1219 08:59:33.426032150 86342 tcp_client_posix.cc:104] CLIENT_CONNECT: ipv4:127.0.0.1:27465: on_alarm: error="No Error"
// At this point, note that the callbacks are running on different threads.
D1219 08:59:33.426063521 86323 tcp_client_posix.cc:218] XXX on_writable ac->addr_str 0x603000008dd0 before unlock. # refs 2->1. Done 0
// on_writable() unrefs while still holding the lock. Because refs > 0, it marks its "done" as false and unlocks.
D1219 08:59:33.426125130 86342 tcp_client_posix.cc:113] XXX tc_on_alarm ac->addr_str 0x603000008dd0 before unlock. # refs 1->0. Done 1
// right after on_writable() unlocks, tc_on_alarm() acquires the lock and unrefs, this time getting to zero and marking its "done" as true.
// It then proceeds to destroy "ac", and, in particular for this failure, "ac->addr_str".
D1219 08:59:33.426139370 86323 tcp_client_posix.cc:234] XXX on_writable about to read from ac->addr_str 0x603000008dd0. Done 0, error=OS Error
// When on_writable() tries to read ac->addr_str to assemble its error details, it causes a use-after-free.
```
The problem is the lock isn't held long enough by on_writable(). Alternatively, a copy of ac->addr_str could be made in on_writable() while still holding the lock, but that seems more fragile. It doesn't seem that holding the lock longer would be a performance issue, given we are in a failure scenario.
|
| |/ / / / /
|/| | | | | |
|
| |/ / / /
|/| | | | |
|
|\ \ \ \ \
| | | | | |
| | | | | | |
Fix shutdown executor tsan bug
|
|\ \ \ \ \ \
| |_|/ / / /
|/| | | | | |
Mark tcp errors as UNAVAILABLE
|
| |/ / / /
|/| | | | |
|
| | | | | |
|
| | |_|/
| |/| | |
|
|\ \ \ \
| | | | |
| | | | | |
Refactor POSIX TCP client connect.
|