diff options
| author | Zhang Boyang <zhangboyang.id@gmail.com> | 2021-12-02 00:21:48 +0800 |
|---|---|---|
| committer | Zhang Boyang <zhangboyang.id@gmail.com> | 2021-12-19 16:24:47 +0800 |
| commit | ec27853181d898f738ad20fed00f37a00d1d09c3 (patch) | |
| tree | 325ed899f0e0118bd52584f4e5e274ec74d3b49b /debian/libapt-pkg-doc.doc-base.method | |
| parent | 2662f6f255a2f1fee25632dc7666d4153bf5248c (diff) | |
Fix incorrect SIGWINCH handling
Previously, status line is redrawn in signal handler. However, the
drawing code make heavy use of std::string and other syscalls, which may
not be async-signal-safe. This will cause deadlock, overwritten errno,
even silent memory corruption.
This patch implemented Anders Kaseorg's idea. The signal handler will
only set a flag, which is async-signal-safe, and actual redrawing will
be deferred to PackageManagerFancy::Pulse().
Note that the virtual function PackageManagerFancy::Pulse() already
exists in base class but newly overridden in PackageManagerFancy, so the
ABI compatibility should be OK. However, existing compiled programs may
not aware of this new function and continue to use old Pulse() if
compiler had done heavy optimization. Fortunately this is not too
harmful because this will only cause status line not redrawing, which
may consider acceptable.
Closes: #852757
Diffstat (limited to 'debian/libapt-pkg-doc.doc-base.method')
0 files changed, 0 insertions, 0 deletions
