diff options
author | Mike Blumenkrantz <zmike@samsung.com> | 2020-03-18 12:29:21 -0400 |
---|---|---|
committer | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2020-03-20 15:58:03 +0100 |
commit | e4ecb159e7701fe4b7a3595fcb7541dfb3d3649d (patch) | |
tree | 27a56e59327951565b89d87e44b9f48759a5debf | |
parent | 41299c2b095394a0fca4abed874b84261d8319ba (diff) | |
download | efl-e4ecb159e7701fe4b7a3595fcb7541dfb3d3649d.tar.gz |
evas/render: fix log ptr access in render thread
when this lock is released, the evas may be immediately freed, leading to
invalid access in the log call
Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D11536
-rw-r--r-- | src/lib/evas/canvas/evas_render.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 4738c80480..db9f14bf1f 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -3943,9 +3943,11 @@ evas_render_pipe_wakeup(void *data) Render_Updates *ru; Evas_Public_Data *evas = data; Efl_Canvas_Output *out; + Evas *e; eina_evlog("+render_pipe_wakeup", evas->evas, 0.0, NULL); eina_spinlock_take(&(evas->render.lock)); + e = evas->evas; EINA_LIST_FOREACH(evas->outputs, ll, out) { if (!out->output) continue ; @@ -3967,7 +3969,8 @@ evas_render_pipe_wakeup(void *data) } eina_spinlock_release(&(evas->render.lock)); evas_async_events_put(data, 0, NULL, evas_render_async_wakeup); - eina_evlog("-render_pipe_wakeup", evas->evas, 0.0, NULL); + /* use local pointer to avoid data race with 'evas' deref after releasing lock */ + eina_evlog("-render_pipe_wakeup", e, 0.0, NULL); } EAPI void |