[PATCH v2 13/19] nptl: Use tidlock when accessing TID on pthread_getschedparam
Adhemerval Zanella
adhemerval.zanella@linaro.org
Mon Aug 23 19:50:41 GMT 2021
Checked on x86_64-linux-gnu.
---
nptl/pthread_getschedparam.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/nptl/pthread_getschedparam.c b/nptl/pthread_getschedparam.c
index 94316cf897..c41d2a8341 100644
--- a/nptl/pthread_getschedparam.c
+++ b/nptl/pthread_getschedparam.c
@@ -29,12 +29,18 @@ __pthread_getschedparam (pthread_t threadid, int *policy,
struct pthread *pd = (struct pthread *) threadid;
/* Make sure the descriptor is valid. */
- if (INVALID_TD_P (pd))
- /* Not a valid thread handle. */
- return ESRCH;
+ sigset_t oldmask;
+ __libc_signal_block_all (&oldmask);
+ lll_lock (pd->tidlock, LLL_PRIVATE);
int result = 0;
+ if (pd->tid == 0)
+ {
+ result = ESRCH;
+ goto out;
+ }
+
/* See CREATE THREAD NOTES in nptl/pthread_create.c. */
lll_lock (pd->lock, LLL_PRIVATE);
@@ -68,6 +74,10 @@ __pthread_getschedparam (pthread_t threadid, int *policy,
lll_unlock (pd->lock, LLL_PRIVATE);
+out:
+ lll_unlock (pd->tidlock, LLL_PRIVATE);
+ __libc_signal_restore_set (&oldmask);
+
return result;
}
libc_hidden_def (__pthread_getschedparam)
--
2.30.2
More information about the Libc-alpha
mailing list