e_comp_object: fix infinite loop of client inlist 61/213261/1
authorJuyeon Lee <juyeonne.lee@samsung.com>
Tue, 3 Sep 2019 09:54:47 +0000 (18:54 +0900)
committerJuyeon Lee <juyeonne.lee@samsung.com>
Tue, 3 Sep 2019 09:54:50 +0000 (18:54 +0900)
due to layer change while layer_pending
it causes cw-layer dismatch with ec->layer and its evas object layer

Change-Id: I3c8df4c269680ff71c90356f952be3b2095eda55

src/bin/e_comp_object.c

index b7f185075ec418d6bf47b2e0140de5b004c52974..726c371e671e931e81326accc1230119a3de0b1d 100644 (file)
@@ -1576,6 +1576,10 @@ _e_comp_intercept_layer_set(void *data, Evas_Object *obj, int layer)
           {
              E_Client *ec;
 
+             /* if ec->layer and layer are the same but the client is not belong to the given(l)
+                 that means, layer is changed during layer_pending. in this case, need to update layer inlist*/
+             if (cw->layer != l) goto layer_set;
+
              if (cw->visible)
                {
                   e_comp_render_queue();
@@ -1609,6 +1613,8 @@ _e_comp_intercept_layer_set(void *data, Evas_Object *obj, int layer)
           }
         return;
      }
+
+layer_set:
    if (cw->layer == l) return;
    if (e_comp_canvas_client_layer_map(layer) == 9999)
      return; //invalid layer for clients not doing comp effects