mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-23 05:42:29 +00:00
Make POSIX semaphores always process shared
Python triggered the undefined behavior previously since it appears to be posting to a semaphore owned by a different process that wasn't set to process shared mode. The performance loss to process shared futexes is so low and semaphores are generally used for this purpose, so it'll be much simpler to simply not impose undefined behavior here.
This commit is contained in:
parent
b15f9eb58f
commit
298ba74a45
5 changed files with 2 additions and 53 deletions
|
@ -42,54 +42,6 @@ TEST(sem_init, einval) {
|
|||
ASSERT_SYS(EINVAL, -1, sem_init(&sem, 0, -1));
|
||||
}
|
||||
|
||||
TEST(sem_post, accessInChildProcessWhenNotPshared_isUndefinedBehavior) {
|
||||
if (!IsModeDbg()) return;
|
||||
int val;
|
||||
sem_t sem;
|
||||
ASSERT_SYS(0, 0, sem_init(&sem, 0, 0));
|
||||
SPAWN(fork);
|
||||
IgnoreStderr();
|
||||
sem_post(&sem);
|
||||
EXITS(77);
|
||||
}
|
||||
|
||||
TEST(sem_getvalue, accessInChildProcessWhenNotPshared_isUndefinedBehavior) {
|
||||
if (!IsModeDbg()) return;
|
||||
int val;
|
||||
sem_t sem;
|
||||
ASSERT_SYS(0, 0, sem_init(&sem, 0, 0));
|
||||
ASSERT_SYS(0, 0, sem_getvalue(&sem, &val));
|
||||
SPAWN(fork);
|
||||
IgnoreStderr();
|
||||
sem_getvalue(&sem, &val);
|
||||
EXITS(77);
|
||||
ASSERT_SYS(0, 0, sem_destroy(&sem));
|
||||
}
|
||||
|
||||
TEST(sem_timedwait, accessInChildProcessWhenNotPshared_isUndefinedBehavior) {
|
||||
if (!IsModeDbg()) return;
|
||||
int val;
|
||||
sem_t sem;
|
||||
ASSERT_SYS(0, 0, sem_init(&sem, 0, 0));
|
||||
SPAWN(fork);
|
||||
IgnoreStderr();
|
||||
sem_timedwait(&sem, 0);
|
||||
EXITS(77);
|
||||
ASSERT_SYS(0, 0, sem_destroy(&sem));
|
||||
}
|
||||
|
||||
TEST(sem_trywait, accessInChildProcessWhenNotPshared_isUndefinedBehavior) {
|
||||
if (!IsModeDbg()) return;
|
||||
int val;
|
||||
sem_t sem;
|
||||
ASSERT_SYS(0, 0, sem_init(&sem, 0, 0));
|
||||
SPAWN(fork);
|
||||
IgnoreStderr();
|
||||
sem_trywait(&sem);
|
||||
EXITS(77);
|
||||
ASSERT_SYS(0, 0, sem_destroy(&sem));
|
||||
}
|
||||
|
||||
TEST(sem_post, afterDestroyed_isUndefinedBehavior) {
|
||||
if (!IsModeDbg()) return;
|
||||
int val;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue