• src/sbbs3/qwk.cpp qwkjob.cpp qwkjob.h

    From Rob Swindell (on Debian Linux)@VERT to Git commit to main/sbbs/master on Mon Oct 26 19:58:26 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/4f7a9170bdecf787f74abc50
    Modified Files:
    src/sbbs3/qwk.cpp qwkjob.cpp qwkjob.h
    Log Message:
    qwkjob: take over a QWK lock whose holder on this machine has ended

    A QWK lock file left by a crashed or killed process on a POSIX host stayed
    in force until it aged out: an hour for a user lock and 12 hours for a hub lock, which the event thread holds through each call-out and which every
    hub import needs. One crash mid call-out stopped that hub's call-outs and imports on every host for up to 12 hours.

    A lock's text now names its holder process: "<host name> (<machine> pid <pid>)", the machine being gethostname() as in the job temp dir names.
    When a lock is busy and its holder is a process of this machine that is no longer running, qwkjob_open_lock() removes the lock and takes it, logging
    "Took over <lock>, left by an ended process: <holder>". A holder on another machine, a running one, or a lock written by an older version (which names
    no process) is still waited out until max age, as before.

    All QWK job locks (user, hub and <rep>.lock) and the terminal's QWK
    transfer lock go through qwkjob_open_lock().

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

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