Index: libcfa/src/concurrency/locks.cfa
===================================================================
--- libcfa/src/concurrency/locks.cfa	(revision 4a16ddfac8d0837f7a8f337af732b960a1db554d)
+++ libcfa/src/concurrency/locks.cfa	(revision b5749f9f229723263933a2bb054ee2c4e6d2d4e5)
@@ -638,5 +638,5 @@
 }
 
-thread$ * V( semaphore & sem, const bool doUnpark ) with( sem ) {
+bool V( semaphore & sem ) with( sem ) {
 	thread$ * thrd = 0p;
 	lock( lock$ __cfaabi_dbg_ctx2 );
@@ -646,15 +646,14 @@
 	}
 	unlock( lock$ );
-	if ( doUnpark ) unpark( thrd );						// make new owner
-	return thrd;
-}
-
-bool V( semaphore & sem, size_t diff ) with( sem ) {
-	thread$ * thrd = 0p;
+	if ( true ) unpark( thrd );						// make new owner
+	return thrd != 0p;
+}
+
+size_t V( semaphore & sem, size_t count ) with( sem ) {
 	lock( lock$ __cfaabi_dbg_ctx2 );
-	size_t release = max( (size_t)-count$, diff );
-	count$ += diff;
+	size_t release = max( (size_t)-count$, count );
+	count$ += count;
 	for ( release ) unpark( pop_head( waiting$ ) );
 	unlock( lock$ );
-	return thrd != 0p;
-}
+	return release;
+}
Index: libcfa/src/concurrency/locks.hfa
===================================================================
--- libcfa/src/concurrency/locks.hfa	(revision 4a16ddfac8d0837f7a8f337af732b960a1db554d)
+++ libcfa/src/concurrency/locks.hfa	(revision b5749f9f229723263933a2bb054ee2c4e6d2d4e5)
@@ -11,6 +11,6 @@
 // Created On       : Thu Jan 21 19:46:50 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Nov  5 10:27:45 2025
-// Update Count     : 61
+// Last Modified On : Mon Nov 17 20:48:55 2025
+// Update Count     : 63
 //
 
@@ -85,5 +85,4 @@
 
 struct semaphore {
-	// PRIVATE
 	ssize_t count$;										 // - => # waiting threads, 0 => block, + => acquire
 	__spinlock_t lock$;									 // protect blocking-lock critical sections
@@ -99,7 +98,6 @@
 bool try_P( semaphore & sem );
 static inline bool P( semaphore & sem, semaphore & lock, uintptr_t shadow ) { active_thread()->shadow$ = shadow; return P( sem, lock ); }
-thread$ * V( semaphore & sem, const bool doUnpark = true );
-static inline bool V( semaphore & sem ) with( sem ) { return V( sem, true ) != 0p; }
-bool V( semaphore & sem, size_t count );
+bool V( semaphore & sem );
+size_t V( semaphore & sem, size_t count );
 static inline uintptr_t front( semaphore & sem ) with( sem ) { // return shadow information for first waiting thread
 	#ifdef __CFA_DEBUG__
