From 3ed12dcaa68ebcdd874dce65943eec90fbf3721f Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 16 Nov 2025 13:39:34 +0200 Subject: [PATCH] Mark thread as started immediately, otherwise thread kill logic won't work correctly if it is killed before it has executed first few instructions. --- pcem/vid_s3.cpp | 2 +- pcem/vid_s3_virge.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pcem/vid_s3.cpp b/pcem/vid_s3.cpp index b103bdce..c59cb4df 100644 --- a/pcem/vid_s3.cpp +++ b/pcem/vid_s3.cpp @@ -890,7 +890,6 @@ static void fifo_thread(void *param) { s3_t *s3 = (s3_t *)param; - s3->fifo_thread_state = 1; while (s3->fifo_thread_state > 0) { thread_set_event(s3->fifo_not_full_event); @@ -2888,6 +2887,7 @@ static void *s3_init(char *bios_fn, int chip) s3->wake_fifo_thread = thread_create_event(); s3->fifo_not_full_event = thread_create_event(); + s3->fifo_thread_state = 1; s3->fifo_thread = thread_create(fifo_thread, s3); s3->int_line = 0; diff --git a/pcem/vid_s3_virge.cpp b/pcem/vid_s3_virge.cpp index 4df9d068..0dc96cd3 100644 --- a/pcem/vid_s3_virge.cpp +++ b/pcem/vid_s3_virge.cpp @@ -1069,7 +1069,6 @@ static void fifo_thread(void *param) { virge_t *virge = (virge_t *)param; - virge->fifo_thread_state = 1; while (virge->fifo_thread_state > 0) { thread_set_event(virge->fifo_not_full_event); @@ -3475,7 +3474,6 @@ static void render_thread(void *param) { virge_t *virge = (virge_t *)param; - virge->render_thread_state = 1; while (virge->render_thread_state > 0) { thread_wait_event(virge->wake_render_thread, -1); @@ -4050,10 +4048,12 @@ static void *s3_virge_init(const device_t *info) virge->wake_render_thread = thread_create_event(); virge->wake_main_thread = thread_create_event(); virge->not_full_event = thread_create_event(); + virge->render_thread_state = 1; virge->render_thread = thread_create(render_thread, virge); virge->wake_fifo_thread = thread_create_event(); virge->fifo_not_full_event = thread_create_event(); + virge->fifo_thread_state = 1; virge->fifo_thread = thread_create(fifo_thread, virge); //ddc_init(); @@ -4151,10 +4151,12 @@ static void *s3_virge_375_init() virge->wake_render_thread = thread_create_event(); virge->wake_main_thread = thread_create_event(); virge->not_full_event = thread_create_event(); + virge->render_thread_state = 1; virge->render_thread = thread_create(render_thread, virge); virge->wake_fifo_thread = thread_create_event(); virge->fifo_not_full_event = thread_create_event(); + virge->fifo_thread_state = 1; virge->fifo_thread = thread_create(fifo_thread, virge); //ddc_init(); -- 2.47.3