Утечка памяти в si_user_byuid/getpwuid, происходящая из CPSharedResourcesDirectory в iOS

Я нахожусь на этапе оптимизации / анализа продукта, который появится в продаже через пару недель, и я удивлен, обнаружив некоторые утечки, которые не (как мне кажется) происходят из моего кода. Одним из них является утечка strdup/malloc, присутствующая в iOS 5.1.1, для которой я ничего не могу сделать, кроме как ждать обновления. Однако сегодня я обнаружил новый, и в настоящее время я пытаюсь определить, где и как он протекает. Инструменты отчетов:

     Bytes Used         # Leaks Symbol Name
     16 Bytes  100.0%   1       start
     16 Bytes  100.0%   1        main
     16 Bytes  100.0%   1         UIApplicationMain
     16 Bytes  100.0%   1          -[UIApplication _run]
     16 Bytes  100.0%   1           _UIAccessibilityInitialize
     16 Bytes  100.0%   1            -[UIApplication(UIKitApplicationAccessibility) _accessibilityInit]
     16 Bytes  100.0%   1             -[UIApplication(UIKitApplicationAccessibility) _updateAccessibilitySettingsLoader]
     16 Bytes  100.0%   1              _AXSAccessibilityEnabled
     16 Bytes  100.0%   1               _getBooleanPreference
     16 Bytes  100.0%   1                CPCopySharedResourcesPreferencesDomainForDomain
     16 Bytes  100.0%   1                 CPSharedResourcesDirectory
     16 Bytes  100.0%   1                  getpwuid
     16 Bytes  100.0%   1                   si_user_byuid
     16 Bytes  100.0%   1                    search_item_bynumber
     16 Bytes  100.0%   1                     si_user_byuid
     16 Bytes  100.0%   1                      _fsi_get_user
     16 Bytes  100.0%   1                       0x119048
     16 Bytes  100.0%   1                        0x1180e4
     16 Bytes  100.0%   1                         malloc

Из небольшой копки я узнал, что getpwuid - это функция unix/linux, импортированная <pwd.h>, Двойной щелчок по si_user_byuid в инструментах появляется знак "Нет источника" и двойной щелчок на getpwuid приходит со сборкой arm7 (о которой я извиняюсь, что не знаком с):

+0x0    push                           {r4, r5, r7, lr}
+0x2    add                            r7, sp, #8
+0x4    movw.w                         r5, #18506  ; 0x484a
+0x8    movt.w                         r5, #3265  ; 0xcc1
+0xc    mov                            r4, r0
+0xe    add                            r5, r15
+0x10   ldr                            r0, [r5]
+0x12   cbnz                           getpwuid
+0x14   movw.w                         r0, #47748  ; 0xba84
+0x18   movt.w                         r0, #1  ; 0x1
+0x1c   add                            r0, r15
+0x1e   bl.w                           getpwuid
+0x22   str                            r0, [r5]
+0x24   mov                            r1, r4
+0x26   bl.w                           getpwuid
+0x2a   mov                            r4, r0
+0x2c   movs                           r0, #201  ; 0xc9
+0x2e   mov                            r1, r4
+0x30   bl.w                           getpwuid
+0x34   movs                           r0, #0  ; 0x0
+0x36   cmp                            r4, #0  ; 0x0
+0x38   it                             ne
+0x3a   addne.w                        r0, r4, #28  ; 0x1c
+0x3e   pop                            {r4, r5, r7, pc}

Так:

  • Кто-нибудь видел это раньше?
  • Может ли это быть ложно-положительным?
  • Может ли это быть ограничено iOS 5.1.1?

1 ответ

Вот источник всего этого, начиная с getpwuid, На первый взгляд кажется, что происходит какое-то кэширование, поэтому я бы не стал сильно волноваться, если бы не большая утечка.

Другие вопросы по тегам