[mutter] output/kms: Make drmModeEncoderPtr array local



commit 065bf752f4110d8b466df5097b073c7367a852c5
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Fri Feb 1 19:23:06 2019 +0100

    output/kms: Make drmModeEncoderPtr array local
    
    It was only used within one function, where it was always created, but
    still was kept around indefinitely for no reason. Lets get rid of it
    from the MetaOutputKms struct.
    
    https://gitlab.gnome.org/GNOME/mutter/issues/548
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/525

 src/backends/native/meta-output-kms.c | 40 +++++++++++++++++------------------
 1 file changed, 19 insertions(+), 21 deletions(-)
---
diff --git a/src/backends/native/meta-output-kms.c b/src/backends/native/meta-output-kms.c
index f3cc543c4..50b58b76f 100644
--- a/src/backends/native/meta-output-kms.c
+++ b/src/backends/native/meta-output-kms.c
@@ -41,10 +41,6 @@ typedef struct _MetaOutputKms
 
   drmModeConnector *connector;
 
-  unsigned int n_encoders;
-  drmModeEncoderPtr *encoders;
-  drmModeEncoderPtr current_encoder;
-
   /*
    * Bitmasks of encoder position in the resources array (used during clone
    * setup).
@@ -409,14 +405,9 @@ static void
 meta_output_destroy_notify (MetaOutput *output)
 {
   MetaOutputKms *output_kms;
-  unsigned i;
 
   output_kms = output->driver_private;
 
-  for (i = 0; i < output_kms->n_encoders; i++)
-    drmModeFreeEncoder (output_kms->encoders[i]);
-  g_free (output_kms->encoders);
-
   g_slice_free (MetaOutputKms, output_kms);
 }
 
@@ -568,6 +559,9 @@ meta_create_kms_output (MetaGpuKms        *gpu_kms,
   unsigned int crtc_mask;
   int fd;
   uint32_t id;
+  unsigned int n_encoders;
+  drmModeEncoderPtr *encoders;
+  drmModeEncoderPtr current_encoder = NULL;
 
   output = g_object_new (META_TYPE_OUTPUT, NULL);
 
@@ -624,16 +618,16 @@ meta_create_kms_output (MetaGpuKms        *gpu_kms,
       return NULL;
     }
 
-  output_kms->n_encoders = connector->count_encoders;
-  output_kms->encoders = g_new0 (drmModeEncoderPtr, output_kms->n_encoders);
+  n_encoders = connector->count_encoders;
+  encoders = g_new0 (drmModeEncoderPtr, n_encoders);
 
   fd = meta_gpu_kms_get_fd (gpu_kms);
 
   crtc_mask = ~(unsigned int) 0;
-  for (i = 0; i < output_kms->n_encoders; i++)
+  for (i = 0; i < n_encoders; i++)
     {
-      output_kms->encoders[i] = drmModeGetEncoder (fd, connector->encoders[i]);
-      if (!output_kms->encoders[i])
+      encoders[i] = drmModeGetEncoder (fd, connector->encoders[i]);
+      if (!encoders[i])
         continue;
 
       /* We only list CRTCs as supported if they are supported by all encoders
@@ -641,10 +635,10 @@ meta_create_kms_output (MetaGpuKms        *gpu_kms,
 
          This is what xf86-video-modesetting does (see drmmode_output_init())
          */
-      crtc_mask &= output_kms->encoders[i]->possible_crtcs;
+      crtc_mask &= encoders[i]->possible_crtcs;
 
-      if (output_kms->encoders[i]->encoder_id == connector->encoder_id)
-        output_kms->current_encoder = output_kms->encoders[i];
+      if (encoders[i]->encoder_id == connector->encoder_id)
+        current_encoder = encoders[i];
     }
 
   crtcs = g_array_new (FALSE, FALSE, sizeof (MetaCrtc*));
@@ -662,13 +656,13 @@ meta_create_kms_output (MetaGpuKms        *gpu_kms,
   output->n_possible_crtcs = crtcs->len;
   output->possible_crtcs = (void*)g_array_free (crtcs, FALSE);
 
-  if (output_kms->current_encoder && output_kms->current_encoder->crtc_id != 0)
+  if (current_encoder && current_encoder->crtc_id != 0)
     {
       for (l = meta_gpu_get_crtcs (gpu); l; l = l->next)
         {
           MetaCrtc *crtc = l->data;
 
-          if (crtc->crtc_id == output_kms->current_encoder->crtc_id)
+          if (crtc->crtc_id == current_encoder->crtc_id)
             {
               meta_output_assign_crtc (output, crtc);
               break;
@@ -737,9 +731,9 @@ meta_create_kms_output (MetaGpuKms        *gpu_kms,
   output_kms->enc_clone_mask = 0xff;
   output_kms->encoder_mask = 0;
 
-  for (i = 0; i < output_kms->n_encoders; i++)
+  for (i = 0; i < n_encoders; i++)
     {
-      drmModeEncoder *output_encoder = output_kms->encoders[i];
+      drmModeEncoder *output_encoder = encoders[i];
       unsigned int j;
 
       for (j = 0; j < resources->n_encoders; j++)
@@ -757,5 +751,9 @@ meta_create_kms_output (MetaGpuKms        *gpu_kms,
       output_kms->enc_clone_mask &= output_encoder->possible_clones;
     }
 
+  for (i = 0; i < n_encoders; i++)
+    drmModeFreeEncoder (encoders[i]);
+  g_free (encoders);
+
   return output;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]