Improve thread safety
This commit is contained in:
parent
cbe86869e0
commit
9585ce7f9e
2 changed files with 19 additions and 3 deletions
|
@ -27,7 +27,14 @@ fn fetchThread(state: *AppState) !void {
|
|||
var curl = Curl.init() orelse return;
|
||||
defer curl.deinit();
|
||||
|
||||
while (state.departure_screen_state.fetch_thread != null) {
|
||||
while (true) {
|
||||
{
|
||||
state.departure_screen_state.mutex.lock();
|
||||
defer state.departure_screen_state.mutex.unlock();
|
||||
if (state.departure_screen_state.fetch_thread == null) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
var fetch_anyway = state.departure_screen_state.should_refresh;
|
||||
if (state.departure_screen_state.last_refresh_time + 30000 < std.time.milliTimestamp()) {
|
||||
fetch_anyway = true;
|
||||
|
@ -635,6 +642,9 @@ pub fn render(state: *AppState) !void {
|
|||
switch (key) {
|
||||
rl.KEY_LEFT => {
|
||||
state.screen = .home;
|
||||
ds.mutex.lock();
|
||||
defer ds.mutex.unlock();
|
||||
ds.fetch_thread = null;
|
||||
},
|
||||
rl.KEY_R => {
|
||||
ds.should_refresh = true;
|
||||
|
@ -666,7 +676,10 @@ pub fn render(state: *AppState) !void {
|
|||
|
||||
{
|
||||
ds.mutex.lock();
|
||||
defer ds.mutex.unlock();
|
||||
defer {
|
||||
ds.mutex.unlock();
|
||||
_ = std.Thread.yield() catch null;
|
||||
}
|
||||
switch (ds.render_style) {
|
||||
.db1 => try draw_db1(state),
|
||||
.ns => try draw_ns(state),
|
||||
|
|
|
@ -102,7 +102,10 @@ pub fn render(state: *AppState) !void {
|
|||
}
|
||||
|
||||
state.home_screen_state.mutex.lock();
|
||||
defer state.home_screen_state.mutex.unlock();
|
||||
defer {
|
||||
state.home_screen_state.mutex.unlock();
|
||||
_ = std.Thread.yield() catch null;
|
||||
}
|
||||
|
||||
while (raylib.GetKeyPressed()) |key| {
|
||||
switch (key) {
|
||||
|
|
Loading…
Add table
Reference in a new issue