if (tids_sent_signals.find(existing_tid) == tids_sent_signals.end()) {
tids_sent_signals.insert(existing_tid);
add_managed_tid(existing_tid);
-
- static constexpr unsigned ATTEMPTS = 2;
- for (unsigned attempt = 0; attempt < ATTEMPTS; ++attempt) {
- // thread not managed yet, send signal
- if (Syscall::tgkill(own_pid, existing_tid, SIGSETXID) == 0)
- break;
-
+ // thread not managed yet, send signal
+ if (Syscall::tgkill(own_pid, existing_tid, SIGSETXID) < 0) {
auto err = errno;
if (EAGAIN == err) { // resource temporarily unavailable, trying again
- if (attempt == ATTEMPTS - 1) {
- LogWithErrno(err, "tgkill()");
- abort(); // too many attempts
- }
-
LogWarning("Received EAGAIN from tgkill, wait a bit & try again");
usleep(SLEEP_CONST); // 10 ms
+ if (Syscall::tgkill(own_pid, existing_tid, SIGSETXID) < 0) {
+ err = errno;
+ if (ESRCH == err) { // thread already gone - noop
+ continue;
+ } else {
+ LogWithErrno(err, "tgkill()");
+ abort();
+ }
+ }
+ }
+ if (ESRCH == err) { // thread already gone - noop
continue;
- } else if (ESRCH == err) { // thread already gone - noop
- break;
} else {
LogWithErrno(err, "tgkill()");
abort();