[geary/mjog/problem-report-memory-fixes: 3/3] Geary.ProblemReport: Copy log records when constructed



commit 11e35a998b782c9329c6683f7f35e0cf8d757195
Author: Michael Gratton <mike vee net>
Date:   Sun Mar 1 21:39:31 2020 +1100

    Geary.ProblemReport: Copy log records when constructed
    
    Take a copy of extant log records when constrcuted so that newer records
    can be dropped while the problem report still exists. This uses more
    memory, but limits unbounded memory growth while any log reports
    still exists.

 src/engine/api/geary-problem-report.vala | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/src/engine/api/geary-problem-report.vala b/src/engine/api/geary-problem-report.vala
index 5f21b856..402d6310 100644
--- a/src/engine/api/geary-problem-report.vala
+++ b/src/engine/api/geary-problem-report.vala
@@ -26,8 +26,21 @@ public class Geary.ProblemReport : Object {
         if (error != null) {
             this.error = new ErrorContext(error);
         }
-        this.earliest_log = Logging.get_earliest_record();
-        this.latest_log = Logging.get_latest_record();
+        Logging.Record next_original = Logging.get_earliest_record();
+        Logging.Record last_original = Logging.get_latest_record();
+        if (next_original != null) {
+            Logging.Record copy = this.earliest_log = new Logging.Record.copy(
+                next_original
+            );
+            next_original = next_original.next;
+            while (next_original != null &&
+                   next_original != last_original) {
+                copy.next = new Logging.Record.copy(next_original);
+                copy = copy.next;
+                next_original = next_original.next;
+            }
+            this.latest_log = copy;
+        }
     }
 
     ~ProblemReport() {


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