• src/xpdev/xpbeep.c

    From Deucе@1:103/705 to Git commit to main/sbbs/master on Wed Feb 7 12:23:42 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/574712547b2d63bf5dcab0f9
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Another Windows warning about constiness.
    --- SBBSecho 3.20-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Sat Feb 10 21:49:16 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/2e2ab2510aa35d61fda176c1
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Fix some warnings.

    We can't use const protection for the sample buffer because the Win32
    API takes non-const buffers. For standard implicit conversions,
    simply disable the warning where it occurs on purpose. It appears
    that MSVC builds use the equivilent of -Wconversion (which isn't even
    part of -Wall).
    --- SBBSecho 3.20-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Windows 11)@1:103/705 to Git commit to main/sbbs/master on Sat Feb 10 22:10:30 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/1c47d84c7c55b6f6cffc0e06
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    _MSC_VER is the macro name you're looking for there :-)
    --- SBBSecho 3.20-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Sat Feb 10 22:28:17 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/abf1cd9ee46327a9d17cba0b
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Actually remove the const the comment says I can't have.
    --- SBBSecho 3.20-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Thu Feb 22 06:50:40 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/63cec349ee714376a2649e5f
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Remove need_copy variable when it won't be used.

    Fixes Coverity issue.
    --- SBBSecho 3.20-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Thu Feb 22 07:03:57 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/ea42fffa92392454971c1cfd
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Keep pointers to dll_handle around to solence Coverity issues.
    --- SBBSecho 3.20-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Mon Sep 30 20:15:08 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/3993af5cda237d9b760680c2
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Since we can check at the menu now, we don't need this warning.
    --- SBBSecho 3.20-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Thu Dec 19 14:03:39 2024
    https://gitlab.synchro.net/main/sbbs/-/commit/a4579ec124b326cd00f8c1ba
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    I *think* this is "FreeBSD or Solaris"...

    Nobody will really care though.
    --- SBBSecho 3.23-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Thu Jan 2 10:16:46 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/5fd6557c9a1719537ae66b7a
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Some especially silly Coverity-induced paranoia.
    --- SBBSecho 3.23-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Fri Jan 3 09:38:31 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/a51bb0859323c8492f340d7c
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Make the types correct and eliminate infinite loop.

    If a write() to the sound device fails (for example USB device goes
    away), this would loop forever (in it's own thread and whatnot,
    so you only notice because sounds stops and a core gets used up).
    --- SBBSecho 3.23-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Fri Jan 3 11:01:35 2025
    https://gitlab.synchro.net/main/sbbs/-/commit/403fce39994d95a63c030811
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Remove stutter.
    --- SBBSecho 3.23-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Mon Apr 20 23:27:36 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/c4d40f8df8bfe47e5962a1e6
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    And, of course, fix the Borland build.
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Tue Apr 21 10:35:41 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/695158804810f59a019739fa
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Add some "idiomatic" idiocy for Windows.
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Tue Apr 21 11:24:52 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/d0f1673364b87c2e9d70ce00
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Fix warning.
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Tue Apr 21 20:07:07 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/4f8d820161535a3e4ff10518
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    xpbeep: fix non-MT build broken by xptone rewrite

    The node-FIFO mixer commit (897325cdb8) rewrote xptone() to open its
    own xp_audio stream via pthread_once + assert_pthread_mutex_lock + xp_audio_open — all MT-only symbols — but xptone() sits outside the XPDEV_THREAD_SAFE guard in xpbeep.c, so non-MT builds (single-threaded
    xpdev consumed by the Borland SBBS build) no longer compiled.

    Split xptone() into two variants under #ifdef XPDEV_THREAD_SAFE / #else:
    - MT keeps the new single-stream xp_audio_open + chunk-append path with
    the stream opened at -12 dB for headroom.
    - Non-MT restores the pre-rewrite per-chunk xp_play_sample16s flow and
    bakes the -12 dB attenuation into the wave buffer with an inline
    0.251 scale, since the non-MT path has no stream/mixer volume to
    carry it.

    Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Wed Apr 22 00:11:54 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/ee221af10158c7b559e3071c
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Switch to an equal-power cross-fade.

    The old dB-linear cross-fade was terrible... the two samples crossed
    at -30dB from the channel level (normally -12), which while perceptible
    isn't exactly what people imagine when they think of a cross-fade.

    The equal-power curve actually seems reasonable for all fades.
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Wed Apr 22 01:17:53 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/77c1c5218b8d4a29a086831d
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Use equal-power ramp for Volume command too.

    This effectively let's you pan channels around as they play.
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Wed May 6 19:41:53 2026
    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 <[email protected]>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Windows 11)@1:103/705 to Git commit to main/sbbs/master on Wed May 6 21:20:12 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/be3ca40eb04a5c95a761ff7d
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    Fix Borland C++ build of xp_audio_open()

    Broken by Claude
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Deucе@1:103/705 to Git commit to main/sbbs/master on Mon Jun 29 22:56:10 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/830596d741d6f092be3e7aab
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    xpbeep: cap pathological ALSA buffer latency

    Open ALSA once with the existing minimal parameter negotiation so
    user and .asoundrc defaults remain authoritative when they produce
    a reasonable buffer.

    If the negotiated ALSA buffer exceeds 300 ms, reopen and retry with
    a CoreAudio-like 3 x 1024-frame target. If the capped retry fails,
    fall back to the original uncapped configuration rather than dropping
    ALSA entirely.

    This should kick in for whatever weird-assed distro DigitalMan uses
    where the mixer latency with the default ALSA device is allegedly
    around 30s.

    Co-Authored-By: OpenAI Codex <[email protected]>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)
  • From Rob Swindell (on Debian Linux)@1:103/705 to Git commit to main/sbbs/master on Fri Jul 17 21:23:33 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/0f56014594e1d842c3a3fed0
    Modified Files:
    src/xpdev/xpbeep.c
    Log Message:
    xpbeep: gaplessly hand off when a mixer buffer ends mid-pull

    xp_mixer_pull() mixed only the head buffer per pull (plus a crossfade
    partner). When a queued buffer was exhausted partway through a pull, the
    rest of that pull was left silent and the next buffer did not start until
    the following pull.

    For one-shot sounds that is inaudible, but a channel fed a continuous
    stream cut into back-to-back chunks -- a game door streaming Opus/PCM
    through SyncTERM's A;Queue FIFO -- crosses a buffer boundary mid-pull
    about four times a second at 250 ms chunks over a ~23 ms (1024-frame)
    device callback. Each boundary dropped up to a full callback of silence,
    heard as constant clicking/popping over the whole stream. It was masked
    on backends with a very small callback (Win32 WASAPI) and obvious on the 1024-frame Linux backends (PulseAudio, PortAudio, SDL).

    Fix: drain successive FIFO buffers into the same pull until it is filled
    or the queue empties, so a buffer that ends mid-pull hands off to its
    successor with no gap. The crossfade-overlay path (head and next mixed concurrently, one pair per pull) is preserved unchanged; a plain buffer
    that drains into a crossfade pair now fills what it used to leave silent.

    Verified with a hardware-free mixer harness: gapless draining across two/three/N buffers, drain-to-empty, exact buffer/pull alignment, and
    consumed state carried across pulls, plus the crossfade behavior, all
    clean under AddressSanitizer/UBSan/LSan.

    Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)