BBS:      TELESC.NET.BR
Assunto:  src/xpdev/xpbeep.c
De:       Rob Swindell (on Debian Linux)
Data:     Wed, 6 May 2026 19:41:53 -0700
-----------------------------------------------------------
https://gitlab.synchro.net/main/sbbs/-/commit/bb2f365233ea170ef1506d92
Modified Files:
	src/xpdev/xpbeep.c
Log Message:
xpbeep: hold r->mutex when reading auto_close/done in reaper (CIDs 645736, 645739)

xp_audio_open's stream-reaper loop read r->auto_close and r->done while
holding only mixer_lock, but those flags are written elsewhere
(xp_audio_stop, the auto_close setter) under r->mutex only  not
mixer_lock. Coverity flagged the inconsistent locking; in practice it
could let the reaper see stale flag values and either skip a reapable
stream (benign  gets reaped on the next open) or, if a future writer
ever clears done while close-pending, cause a missed reap.

Take r->mutex briefly to read the flags, then release it before
free_stream_locked() (which destroys the mutex). Lock order
mixer_lock -> r->mutex matches xp_mixer_pull and xp_audio_close, so no
deadlock risk introduced.

This does NOT address the broader stream_from_handle()-returns-pointer
lifetime issue; that's an architectural concern for a separate change.

Co-Authored-By: Claude Opus 4.7 
n
---
  mSynchronetn  hgVertrauen n hHome of Synchronet n gh[vert/cvs/bbs].synchro.net

-----------------------------------------------------------
[Voltar]