• docs/v322_new.md exec/tests/qwkjob/hub.js pack.js src/sbbs3/qwk.cpp qw

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Mon Oct 26 00:09:03 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/4365e08932e3ba60d0f41e58
    Modified Files:
    docs/v322_new.md exec/tests/qwkjob/hub.js pack.js src/sbbs3/qwk.cpp qwkjob.cpp qwkjob.h sbbs.h
    Log Message:
    qwkjob: take over a QWK lock left by a crashed holder after an hour

    The user (data/pack<user#>.lock), REP and hub (data/qnet/<HUBID>.lock)
    locks were taken with TIMEOUT_MUTEX_FILE (12 hours) as the fmutex maximum
    age. On POSIX a lock file outlives a holder that crashes, and these locks
    are now taken by the Web server, Services and jsexec too, so one crash
    left that user's or hub's QWK traffic refused for up to 12 hours, logged
    only at debug level.

    The jobs and the Terminal Server's QWK download and upload now take the
    locks with QWKJOB_LOCK_MAX_AGE (1 hour). A refusal is logged with the
    holder's text and how long the lock has been held, at LOG_NOTICE once that exceeds QWKJOB_LOCK_NOTICE_AGE (5 minutes), else at LOG_DEBUG. The event thread's hub call-out takes the lock through qwkjob_lock_hub(), so it
    logs the same way.

    Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

    ---
    ■ Synchronet ■ Vertrauen ■ Home of Synchronet ■ [vert/cvs/bbs].synchro.net