raster pushed a commit to branch master.

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

commit e164d14208637b4f9d19457f59cf6edaa2935298
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Tue Oct 28 20:09:33 2014 +0900

    evas - fix new issue with segv when switching to alpha win with gl
    
    evas gl window was freed before new one was created getting shared ctx
    to 0 refcount thus freeing everything there - BAD. fix. new issue in
    git, not from release
---
 src/modules/evas/engines/gl_x11/evas_engine.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c 
b/src/modules/evas/engines/gl_x11/evas_engine.c
index 1fe13be..a9f03eb 100644
--- a/src/modules/evas/engines/gl_x11/evas_engine.c
+++ b/src/modules/evas/engines/gl_x11/evas_engine.c
@@ -1433,9 +1433,9 @@ eng_setup(Evas *eo_e, void *in)
                  (info->info.depth != eng_get_ob(re)->depth) ||
                  (info->info.destination_alpha != eng_get_ob(re)->alpha))
                {
-                  Outbuf *ob;
+                  Outbuf *ob, *ob_old;
 
-                  eng_window_free(eng_get_ob(re));
+                  ob_old = re->generic.software.ob;
                   re->generic.software.ob = NULL;
                   gl_wins--;
 
@@ -1453,17 +1453,16 @@ eng_setup(Evas *eo_e, void *in)
                                       swap_mode);
                   if (!ob)
                     {
+                       if (ob_old) eng_window_free(ob_old);
                        free(re);
                        return 0;
                     }
                   eng_window_use(ob);
-                  if (ob)
-                    {
-                       
evas_render_engine_software_generic_update(&re->generic.software, ob,
-                                                                  e->output.w, 
e->output.h);
+                  if (ob_old) eng_window_free(ob_old);
+                  
evas_render_engine_software_generic_update(&re->generic.software, ob,
+                                                             e->output.w, 
e->output.h);
 
-                       gl_wins++;
-                    }
+                  gl_wins++;
                }
              else if ((eng_get_ob(re)->w != e->output.w) ||
                       (eng_get_ob(re)->h != e->output.h) ||

-- 


Reply via email to