Fix resource leak 16/271816/1
authorJunkyeong, Kim <jk0430.kim@samsung.com>
Wed, 2 Mar 2022 02:01:37 +0000 (11:01 +0900)
committerJunkyeong, Kim <jk0430.kim@samsung.com>
Wed, 2 Mar 2022 02:01:41 +0000 (11:01 +0900)
When new rdp client activated, create surface when first client is activated.
From second client, use previous created surface.

Change-Id: I8d33ffde0a5f0429521d578fb0a1d3d9a217580a
Signed-off-by: Junkyeong, Kim <jk0430.kim@samsung.com>
src/e_mod_rdp.c

index 8ed9cd5..c44541e 100644 (file)
@@ -1383,39 +1383,48 @@ e_rdp_peer_activate(freerdp_peer *client)
    pointer_system.type = SYSPTR_NULL;
    pointer->PointerSystem(client->context, &pointer_system);
 
-   tbm_surface = _e_rdp_tbm_image_create(output, output->w, output->h, 0xFFFFCCFF);
-   if (tbm_surface == NULL)
-     {
-        ERR("create sample tbm surface failed");
-        return TRUE;
-     }
-   pix_surface = _e_rdp_pixman_image_create(tbm_surface);
-   if (pix_surface == NULL)
+   if (b->client_count == 1)
      {
-        ERR("create sample pixman failed");
-        tbm_surface_destroy(tbm_surface);
-        return TRUE;
-     }
+        tbm_surface = _e_rdp_tbm_image_create(output, output->w, output->h, 0xFFFFCCFF);
+        if (tbm_surface == NULL)
+          {
+             ERR("create sample tbm surface failed");
+             return TRUE;
+          }
+        pix_surface = _e_rdp_pixman_image_create(tbm_surface);
+        if (pix_surface == NULL)
+          {
+             ERR("create sample pixman failed");
+             tbm_surface_destroy(tbm_surface);
+             return TRUE;
+          }
 
-   /* sends a full refresh */
-   box.x1 = 0;
-   box.y1 = 0;
-   box.x2 = output->w;
-   box.y2 = output->h;
-   pixman_region32_init_with_extents(&damage, &box);
+        /* sends a full refresh */
+        box.x1 = 0;
+        box.y1 = 0;
+        box.x2 = output->w;
+        box.y2 = output->h;
+        pixman_region32_init_with_extents(&damage, &box);
 
-   output->prepare_tbm_surface = tbm_surface;
+        e_rdp_peer_refresh_region(&damage, client, pix_surface);
 
-   e_rdp_peer_refresh_region(&damage, client, pix_surface);
+        pixman_region32_fini(&damage);
 
-   pixman_region32_fini(&damage);
+        output->showing_surface = pix_surface;
+        output->showing_tbm_surface = tbm_surface;
 
-   if (output->frame_timer != NULL)
-     ecore_timer_del(output->frame_timer);
-   output->refresh_time = _e_rdp_refresh_time_set(output->w, output->h);
-   output->refresh_count = 5;
-   output->frame_timer = ecore_timer_add(output->refresh_time, _e_rdp_frame_timer, output);
-   output->buffer_changed = EINA_TRUE;
+        if (output->frame_timer != NULL)
+          ecore_timer_del(output->frame_timer);
+        output->refresh_time = _e_rdp_refresh_time_set(output->w, output->h);
+        output->refresh_count = 5;
+        output->frame_timer = ecore_timer_add(output->refresh_time, _e_rdp_frame_timer, output);
+        output->buffer_changed = EINA_TRUE;
+     }
+   else
+     {
+        output->refresh_count = 5;
+        output->buffer_changed = EINA_TRUE;
+     }
 
    return TRUE;
 }