Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: nptl/pthread_condattr_setclock.c

Issue 1234673002: Clean up error returns for unsupported pthread mutex/cond attr values (Closed) Base URL: https://chromium.googlesource.com/native_client/nacl-glibc.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | nptl/pthread_condattr_setpshared.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* Copyright (C) 2003, 2004, 2007, 2008 Free Software Foundation, Inc. 1 /* Copyright (C) 2003, 2004, 2007, 2008 Free Software Foundation, Inc.
2 This file is part of the GNU C Library. 2 This file is part of the GNU C Library.
3 Contributed by Ulrich Drepper <drepper@redhat.com>, 2003. 3 Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
4 4
5 The GNU C Library is free software; you can redistribute it and/or 5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public 6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version. 8 version 2.1 of the License, or (at your option) any later version.
9 9
10 The GNU C Library is distributed in the hope that it will be useful, 10 The GNU C Library is distributed in the hope that it will be useful,
(...skipping 13 matching lines...) Expand all
24 #include <sysdep.h> 24 #include <sysdep.h>
25 #include "pthreadP.h" 25 #include "pthreadP.h"
26 #include <kernel-features.h> 26 #include <kernel-features.h>
27 27
28 28
29 int 29 int
30 pthread_condattr_setclock (attr, clock_id) 30 pthread_condattr_setclock (attr, clock_id)
31 pthread_condattr_t *attr; 31 pthread_condattr_t *attr;
32 clockid_t clock_id; 32 clockid_t clock_id;
33 { 33 {
34 /* Only a few clocks are allowed. CLOCK_REALTIME is always allowed. 34 switch (clock_id)
35 CLOCK_MONOTONIC only if the kernel has the necessary support. */
36 if (clock_id == CLOCK_MONOTONIC)
37 { 35 {
38 #ifndef __ASSUME_POSIX_TIMERS 36 case CLOCK_REALTIME:
39 # ifdef __NR_clock_getres 37 /* This is the default state and the only one actually supported. */
40 /* Check whether the clock is available. */ 38 return 0;
41 static int avail;
42 39
43 if (avail == 0) 40 case CLOCK_MONOTONIC:
44 » { 41 /* NaCl recognizes CLOCK_MONOTONIC for other purposes, so it is a
45 » struct timespec ts; 42 "known clock". But NaCl doesn't support it for this purpose. */
43 return ENOTSUP;
46 44
47 » INTERNAL_SYSCALL_DECL (err); 45 default:
48 » int val; 46 /* The only other recognized clocks are CPU-time clocks,
49 » val = INTERNAL_SYSCALL (clock_getres, err, 2, CLOCK_MONOTONIC, &ts); 47 which POSIX says should get EINVAL. */
50 » avail = INTERNAL_SYSCALL_ERROR_P (val, err) ? -1 : 1; 48 return EINVAL;
51 » }
52
53 if (avail < 0)
54 # endif
55 » /* Not available. */
56 » return EINVAL;
57 #endif
58 } 49 }
59 else if (clock_id != CLOCK_REALTIME)
60 /* If more clocks are allowed some day the storing of the clock ID
61 in the pthread_cond_t structure needs to be adjusted. */
62 return EINVAL;
63
64 /* Make sure the value fits in the bits we reserved. */
65 assert (clock_id < (1 << COND_NWAITERS_SHIFT));
66
67 int *valuep = &((struct pthread_condattr *) attr)->value;
68
69 *valuep = ((*valuep & ~(((1 << COND_NWAITERS_SHIFT) - 1) << 1))
70 | (clock_id << 1));
71
72 return 0;
73 } 50 }
OLDNEW
« no previous file with comments | « no previous file | nptl/pthread_condattr_setpshared.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698