widgets(terminal): prevent deadlock in draw
The draw method could obtain a lock but never free it due to the logic of the if statement.
This commit is contained in:
parent
3a382eacdb
commit
11ae2e7b29
1 changed files with 5 additions and 2 deletions
|
@ -166,9 +166,12 @@ pub fn resize(self: *Terminal, ws: Winsize) !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn draw(self: *Terminal, win: vaxis.Window) !void {
|
pub fn draw(self: *Terminal, win: vaxis.Window) !void {
|
||||||
if (self.back_mutex.tryLock() and !self.mode.sync) {
|
if (self.back_mutex.tryLock()) {
|
||||||
defer self.back_mutex.unlock();
|
defer self.back_mutex.unlock();
|
||||||
try self.back_screen.copyTo(&self.front_screen);
|
// We keep this as a separate condition so we don't deadlock by obtaining the lock but not
|
||||||
|
// having sync
|
||||||
|
if (!self.mode.sync)
|
||||||
|
try self.back_screen.copyTo(&self.front_screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
var row: usize = 0;
|
var row: usize = 0;
|
||||||
|
|
Loading…
Reference in a new issue