• exec/tests/qwkjob/hub.js unpack.js src/sbbs3/qwkjob.cpp

    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/55572f85609652cd72413fe2
    Modified Files:
    exec/tests/qwkjob/hub.js unpack.js src/sbbs3/qwkjob.cpp
    Log Message:
    qwkjob: judge a packet empty only under its locks

    qwkjob_unpack_qwk() and qwkjob_unpack_rep() checked for (and removed) an
    empty packet over a minute old before taking the hub lock, or the user and <rep>.lock locks. A QWKnet call-out such as qnet-http.js receive_qwk()
    opens data/<HUBID>.qwk for writing and downloads into it while the event
    thread holds that hub's lock across the call-out, so another host's sweep
    could remove the file mid-download, as soon as the download had stalled
    for a minute.

    The check now runs after the locks are taken, so a busy lock leaves the
    file alone; the regular-file and wildcard check still comes first.

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

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