diff mbox series

[10/26] hw/display/apple-gfx: Fixes ObjC new/init misuse, plugs leaks

Message ID 20240715210705.32365-11-phil@philjordan.eu (mailing list archive)
State New, archived
Headers show
Series [01/26] hw/vmapple/apple-gfx: Introduce ParavirtualizedGraphics.Framework support | expand

Commit Message

Phil Dennis-Jordan July 15, 2024, 9:06 p.m. UTC
The creation of Objective-C objects is split between 'alloc' and
'init...' methods. The single 'new' method is shorthand for alloc+init.
Calling 'new' then 'init...' is therefore redundant. The instances of
new + initWith... are replaced with the alloc/initWith... pattern and
the zero-argument 'init' call is removed from instances of the
new + init pattern.

'new' and alloc+init return an object with a retain count of 1. The
change therefore also inserts release calls for temporary objects
created in this way to prevent them leaking.

Signed-off-by: Phil Dennis-Jordan <phil@philjordan.eu>
---
 hw/display/apple-gfx.m | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)
diff mbox series

Patch

diff --git a/hw/display/apple-gfx.m b/hw/display/apple-gfx.m
index 7f0a231d26..073741ede5 100644
--- a/hw/display/apple-gfx.m
+++ b/hw/display/apple-gfx.m
@@ -63,7 +63,7 @@  -(PGIOSurfaceHostDeviceDescriptor *)init;
 @end
 
 @interface PGIOSurfaceHostDevice : NSObject
--(void)initWithDescriptor:(PGIOSurfaceHostDeviceDescriptor *) desc;
+-(instancetype)initWithDescriptor:(PGIOSurfaceHostDeviceDescriptor *) desc;
 -(uint32_t)mmioReadAtOffset:(size_t) offset;
 -(void)mmioWriteAtOffset:(size_t) offset value:(uint32_t)value;
 @end
@@ -401,8 +401,8 @@  static void apple_gfx_realize(DeviceState *dev, Error **errp)
     int i;
 
     for (i = 0; i < ARRAY_SIZE(apple_gfx_modes); i++) {
-        modes[i] = [PGDisplayMode new];
-        [modes[i] initWithSizeInPixels:apple_gfx_modes[i] refreshRateInHz:60.];
+        modes[i] =
+            [[PGDisplayMode alloc] initWithSizeInPixels:apple_gfx_modes[i] refreshRateInHz:60.];
     }
 
     s->mtl = MTLCreateSystemDefaultDevice();
@@ -499,8 +499,9 @@  static void apple_gfx_realize(DeviceState *dev, Error **errp)
     };
 
     s->pgdev = PGNewDeviceWithDescriptor(desc);
+    [desc release];
+    desc = nil;
 
-    [disp_desc init];
     disp_desc.name = @"QEMU display";
     disp_desc.sizeInMillimeters = NSMakeSize(400., 300.); /* A 20" display */
     disp_desc.queue = dispatch_get_main_queue();
@@ -545,9 +546,14 @@  static void apple_gfx_realize(DeviceState *dev, Error **errp)
     };
 
     s->pgdisp = [s->pgdev newDisplayWithDescriptor:disp_desc port:0 serialNum:1234];
+    [disp_desc release];
     s->pgdisp.modeList = [NSArray arrayWithObjects:modes count:ARRAY_SIZE(apple_gfx_modes)];
 
-    [iosfc_desc init];
+    for (i = 0; i < ARRAY_SIZE(apple_gfx_modes); i++) {
+        [modes[i] release];
+        modes[i] = nil;
+    }
+
     iosfc_desc.mapMemory = ^(uint64_t phys, uint64_t len, bool ro, void **va, void *e, void *f) {
         trace_apple_iosfc_map_memory(phys, len, ro, va, e, f);
         MemoryRegion *tmp_mr;
@@ -573,8 +579,9 @@  static void apple_gfx_realize(DeviceState *dev, Error **errp)
         return (bool)true;
     };
 
-    s->pgiosfc = [PGIOSurfaceHostDevice new];
-    [s->pgiosfc initWithDescriptor:iosfc_desc];
+    s->pgiosfc =
+        [[PGIOSurfaceHostDevice alloc] initWithDescriptor:iosfc_desc];
+    [iosfc_desc release];
 
     QTAILQ_INIT(&s->mrs);
     QTAILQ_INIT(&s->tasks);