فهرست منبع

report sem value overflows in sem_post

this is not required by the standard, but it's nicer than corrupting
the state and rather inexpensive.
Rich Felker 13 سال پیش
والد
کامیت
26120950e2
1فایلهای تغییر یافته به همراه4 افزوده شده و 0 حذف شده
  1. 4 0
      src/thread/sem_post.c

+ 4 - 0
src/thread/sem_post.c

@@ -7,6 +7,10 @@ int sem_post(sem_t *sem)
 	do {
 		val = sem->__val[0];
 		waiters = sem->__val[1];
+		if (val == SEM_VALUE_MAX) {
+			errno = EOVERFLOW;
+			return -1;
+		}
 	} while (a_cas(sem->__val, val, val+1+(val<0)) != val);
 	if (val<0 || waiters) __wake(sem->__val, 1, 0);
 	return 0;