[PATCH RESEND] xfree86: prune duplicate monitor modes.

Michel Dänzer michel at daenzer.net
Wed Aug 7 00:53:52 PDT 2013


From: Leo Liu <leo.liu at amd.com>

same monitor modes added causing memory leak
when looping `xrandr --prop'.

Signed-off-by: Leo Liu <leo.liu at amd.com>
Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 hw/xfree86/modes/xf86EdidModes.c |   22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/hw/xfree86/modes/xf86EdidModes.c b/hw/xfree86/modes/xf86EdidModes.c
index 4ee862d..261780b 100644
--- a/hw/xfree86/modes/xf86EdidModes.c
+++ b/hw/xfree86/modes/xf86EdidModes.c
@@ -1143,6 +1143,27 @@ handle_detailed_monset(struct detailed_monitor_section *det_mon, void *data)
     }
 }
 
+static void
+xf86PruneDuplicateMonitorModes(MonPtr Monitor)
+{
+    DisplayModePtr master, clone, next;
+
+    for (master = Monitor->Modes;
+         master && master != Monitor->Last;
+         master = master->next) {
+        for (clone = master->next;
+             clone && clone != Monitor->Modes;
+             clone = next) {
+            next = clone->next;
+            if (xf86ModesEqual (master, clone)) {
+                if (Monitor->Last == clone)
+                    Monitor->Last = clone->prev;
+                xf86DeleteMode (&Monitor->Modes, clone);
+            }
+        }
+    }
+}
+
 /*
  * Fill out MonPtr with xf86MonPtr information.
  */
@@ -1204,5 +1225,6 @@ xf86EdidMonitorSet(int scrnIndex, MonPtr Monitor, xf86MonPtr DDC)
             Monitor->Modes = Modes;
             Monitor->Last = Mode;
         }
+        xf86PruneDuplicateMonitorModes(Monitor);
     }
 }
-- 
1.7.9.5



More information about the xorg-devel mailing list