aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/read.out
diff options
context:
space:
mode:
authorGravatar Kevin Ballard <kevin@sb.org>2014-08-24 00:59:03 -0700
committerGravatar Kevin Ballard <kevin@sb.org>2014-08-29 12:46:03 -0700
commitcc52a59e1ac7155123a314067cc8ad9f3affe491 (patch)
tree26a24c179ad7f6e8bfe59e77a8f59b53520f7d07 /tests/read.out
parent24ac7d2698c06792cc78a82bb06f41fcdeb0934c (diff)
Rework how screen size is tracked
The screen size is fetched after a SIGWINCH is delivered. The current implementation has two issues: * It calls ioctl() from the SIGWINCH signal handler, despite ioctl() not being a function that is known to be safe to call. * It's not thread-safe. Signals can be delivered on arbitrary threads, so we don't know if it's actually safe to be modifying the cached winsize in response to a signal. It's also plausible that the winsize may be requested from a background thread. To solve the first issue, we twiddle a volatile boolean flag in the signal handler and defer the ioctl() call until we actually request the screen size. To solve the second issue, we introduce a pthread rwlock around the cached winsize. A rwlock is used because it can be expected that there are likely to be far more window size reads than window size writes. If we were using C++11 we could probably get away with atomics, but since we don't have that (or boost), a rwlock should suffice. Fixes #1613.
Diffstat (limited to 'tests/read.out')
0 files changed, 0 insertions, 0 deletions