bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e4ecb159e7701fe4b7a3595fcb7541dfb3d3649d

commit e4ecb159e7701fe4b7a3595fcb7541dfb3d3649d
Author: Mike Blumenkrantz <[email protected]>
Date:   Wed Mar 18 12:29:21 2020 -0400

    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 <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D11536
---
 src/lib/evas/canvas/evas_render.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

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

-- 


Reply via email to