gal2d-renderer: Avoid deadlock on exit
PATCH 1/1 gal2d-renderer: Avoid deadlock on exit
The way the worker thread was shut down was a bit racy. Make sure to set the flag indicating the thread to stop spinning before waking up the thread.
---
src/gal2d-renderer.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
src/gal2d-renderer.c +0 -0
@@ -495,21 +495,21 @@ static void *gal2d_output_worker(void *arg)
{
struct weston_output *output = (struct weston_output *)arg;
struct gal2d_output_state *go = get_output_state(output);
+ int go_on = 1;
- while(1)
+ while(go_on)
{
- if(gcoOS_WaitSignal(gcvNULL, go->signal, gcvINFINITE) == gcvSTATUS_OK ) + int ok = gcoOS_WaitSignal(gcvNULL, go->signal, gcvINFINITE) == gcvSTATUS_OK; +
+ pthread_mutex_lock(&go->workerMutex);
+ go_on = go->exitWorker == 0;
+ pthread_mutex_unlock(&go->workerMutex);
+
+ if (ok && go_on)
{
gal2d_flip_surface(output); gcoOS_Signal(gcvNULL,go->busySignal, gcvTRUE);
}
- pthread_mutex_lock(&go->workerMutex);
- if(go->exitWorker == 1)
- {
- pthread_mutex_unlock(&go->workerMutex);
- break;
- }
- pthread_mutex_unlock(&go->workerMutex);
}
return 0;
}
@@ -1169,10 +1169,10 @@ gal2d_renderer_output_destroy(struct weston_output *output) }
else
{
- gcoOS_Signal(gcvNULL,go->signal, gcvTRUE); pthread_mutex_lock(&go->workerMutex);
go->exitWorker = 1;
pthread_mutex_unlock(&go->workerMutex);
+ gcoOS_Signal(gcvNULL,go->signal, gcvTRUE); pthread_join(go->workerId, NULL);
}
Signature · 1 line
2.5.0
Quoted 5 lines · Richard Röjfors
The way the worker thread was shut down was a bit racy. Make sure to set the flag indicating the thread to stop spinning before waking up the thread.
Signed-off-by Richard Röjfors <[email protected]>
The patch is good and well commented; please include this on the weston recipe and please also add the Upstream-Status: Pending field on this so NXP can pick it for their next release.
Signature · 3 lines
Otavio Salvador O.S. Systems http://www.ossystems.com.br http://code.ossystems.com.br Mobile: +55 (53) 9981-7854 Mobile: +1 (347) 903-9750
Quoted 7 lines · Otavio Salvador
Quoted 4 lines · Richard Röjfors
The way the worker thread was shut down was a bit racy. Make sure to set the flag indicating the thread to stop spinning before waking up the thread.
Quoted 5 lines
Quoted 1 line
Signed-off-by Richard Röjfors <[email protected]>The patch is good and well commented; please include this on the weston recipe and please also add the Upstream-Status: Pending field on this so NXP can pick it for their next release.
Will do!
--Richard
Quoted 9 lines · Richard Röjfors
Quoted 7 lines · Otavio Salvador
Quoted 4 lines · Richard Röjfors
The way the worker thread was shut down was a bit racy. Make sure to set the flag indicating the thread to stop spinning before waking up the thread.
Quoted 8 lines
Quoted 5 lines
Quoted 1 line
Signed-off-by Richard Röjfors <[email protected]>The patch is good and well commented; please include this on the weston recipe and please also add the Upstream-Status: Pending field on this so NXP can pick it for their next release.
Will do!
I've sent it in a separate mail. Please let me know if the formatting isn't as you expect.
Thanks,
--Richard