Сбой на некоторых устройствах при вставке объектов в область - PullRequest
1 голос
/ 26 октября 2019

У меня есть приложение, которое широко использует Realm в качестве внутреннего хранилища. Недавно я столкнулся с проблемой, которая возникает на некоторых устройствах, но не на всех. Я действительно открыл выпуск , но, так как приложение очень серьезно падает, я надеюсь, что я также смогу получить некоторое представление отсюда.

Каждый раз, когда я пытался вставить сообщение в область, оно вылетало. Сначала я использовал 3.18.0 и столкнулся с этой проблемой, затем увидел ошибку, упомянутую в # 6268 и # 6257 . Я обновляю до версии 3.20.0, и кажется, что проблема все еще появилась. Ниже приведена ссылка на журнал ошибок.

Журнал:

enter image description here

Другой журнал:

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x000000019ba1e0dc 0x19b9fb000 + 143580
1   libsystem_pthread.dylib         0x000000019ba9b9b0 0x19ba95000 + 27056
2   libsystem_c.dylib               0x000000019b977f4c 0x19b91d000 + 372556
3   libsystem_c.dylib               0x000000019b977eb4 0x19b91d000 + 372404
4   Realm                           0x0000000106023918 realm::util::terminate+ 3176728 (char const*, char const*, long) + 0
5   Realm                           0x0000000106023be4 realm::util::terminate_internal+ 3177444 (std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) + 264
6   Realm                           0x0000000106023d5c realm::util::terminate+ 3177820 (char const*, char const*, long, std::initializer_list<realm::util::Printable>&&) + 328
7   Realm                           0x0000000105d4db38 realm::Column<long long>::do_erase(unsigned long, unsigned long, bool) + 203576 (column.hpp:1606)
8   Realm                           0x00000001060b60e0 realm::sync::TableInfoCache::get_table_info+ 3776736 (unsigned long) const + 1908
9   Realm                           0x00000001060b6bf8 realm::sync::create_object_with_primary_key+ 3779576 (realm::sync::TableInfoCache const&, realm::Table&, realm::util::Optional<long long>) + 52
10  Realm                           0x0000000105d9a400 realm::Object realm::Object::create<objc_object* __strong, RLMAccessorContext>(RLMAccessorContext&, std::__1::shared_ptr<realm::Realm> const&, realm::ObjectSchema const&, objc_object* __strong, bool, bool, unsigned long, realm::BasicRow<realm::Table>*) + 517120 (object_accessor.hpp:0)
11  Realm                           0x0000000105d9a090 RLMAddObjectToRealm + 516240 (RLMObjectStore.mm:152)
12  <myapp>                         0x0000000104b4b4a4 MyClass.insertRealmMessage(_:scrollToBottom:) + 357540 (MyClass+Realm.swift:0)
13  <myapp>                         0x0000000104c04010 specialized MyClass.handle(_:something:) + 1114128 (MyClass+Socket.swift:0)
14  <myapp>                         0x0000000104bec4a0 MyClass.process(_:didReceive:) + 1016992 (MyClass.swift:0)
15  <myapp>                         0x0000000104ba84b8 closure #1 in MyClass.stream(_:didReceive:) + 738488 (MyClass.swift:0)
16  <myapp>                         0x0000000104b0c8cc thunk for @escaping @callee_guaranteed () -> () + 100556 (<compiler-generated>:0)
17  libdispatch.dylib               0x000000019b8c0a38 0x19b861000 + 391736
18  libdispatch.dylib               0x000000019b8c17d4 0x19b861000 + 395220
19  libdispatch.dylib               0x000000019b8a19e4 0x19b861000 + 264676
20  CoreFoundation                  0x000000019be11ec0 0x19bd68000 + 696000
21  CoreFoundation                  0x000000019be0cdf8 0x19bd68000 + 675320
22  CoreFoundation                  0x000000019be0c354 0x19bd68000 + 672596
23  GraphicsServices                0x000000019e00c79c 0x19e002000 + 42908
24  UIKitCore                       0x00000001c83f7b68 0x1c7b3d000 + 9153384
25  <myapp>                         0x0000000104afbcd0 main + 31952 (User.swift:29)
26  libdyld.dylib                   0x000000019b8d28e0 0x19b8d1000 + 6368

Другой журнал:

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x000000019ba1e0dc 0x19b9fb000 + 143580
1   libsystem_pthread.dylib         0x000000019ba9b9b0 0x19ba95000 + 27056
2   libsystem_c.dylib               0x000000019b977f4c 0x19b91d000 + 372556
3   libsystem_c.dylib               0x000000019b977eb4 0x19b91d000 + 372404
4   Realm                           0x00000001018f3918 realm::util::terminate+ 3176728 (char const*, char const*, long) + 0
5   Realm                           0x00000001018f3be4 realm::util::terminate_internal+ 3177444 (std::__1::basic_stringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) + 264
6   Realm                           0x00000001018f3d5c realm::util::terminate+ 3177820 (char const*, char const*, long, std::initializer_list<realm::util::Printable>&&) + 328
7   Realm                           0x000000010161db38 realm::Column<long long>::do_erase(unsigned long, unsigned long, bool) + 203576 (column.hpp:1606)
8   Realm                           0x00000001019860e0 realm::sync::TableInfoCache::get_table_info+ 3776736 (unsigned long) const + 1908
9   Realm                           0x0000000101986bf8 realm::sync::create_object_with_primary_key+ 3779576 (realm::sync::TableInfoCache const&, realm::Table&, realm::util::Optional<long long>) + 52
10  Realm                           0x000000010166a400 realm::Object realm::Object::create<objc_object* __strong, RLMAccessorContext>(RLMAccessorContext&, std::__1::shared_ptr<realm::Realm> const&, realm::ObjectSchema const&, objc_object* __strong, bool, bool, unsigned long, realm::BasicRow<realm::Table>*) + 517120 (object_accessor.hpp:0)
11  Realm                           0x000000010166a090 RLMAddObjectToRealm + 516240 (RLMObjectStore.mm:152)
12  <myapp>                         0x000000010047ebb0 MyClass.handle(realmMessage:shouldGenerateAutoIncrement:) + 207792 (MyClass.swift:0)
13  <myapp>                         0x0000000100482588 specialized MyClass.handle(_:chat:) + 222600 (MyClass.swift:0)
14  <myapp>                         0x00000001005444a0 MyClass.function(_:didReceive:) + 1016992 (MyClass.swift:0)
15  <myapp>                         0x00000001005004b8 closure #1 in MyClass.strem(_:didReceive:) + 738488 (MyClass.swift:0)
16  <myapp>                         0x00000001004648cc thunk for @escaping @callee_guaranteed () -> () + 100556 (<compiler-generated>:0)
17  libdispatch.dylib               0x000000019b8c0a38 0x19b861000 + 391736
18  libdispatch.dylib               0x000000019b8c17d4 0x19b861000 + 395220
19  libdispatch.dylib               0x000000019b8a19e4 0x19b861000 + 264676
20  CoreFoundation                  0x000000019be11ec0 0x19bd68000 + 696000
21  CoreFoundation                  0x000000019be0cdf8 0x19bd68000 + 675320
22  CoreFoundation                  0x000000019be0c354 0x19bd68000 + 672596
23  GraphicsServices                0x000000019e00c79c 0x19e002000 + 42908
24  UIKitCore                       0x00000001c83f7b68 0x1c7b3d000 + 9153384
25  <myapp>                         0x0000000100453cd0 main + 31952 (User.swift:29)
26  libdyld.dylib                   0x000000019b8d28e0 0x19b8d1000 + 6368

Шаги по воспроизведению

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

Почти каждое из действий INSERT объекта сообщения может привести к сбою в соответствии с моими клиентами. Это может произойти в любом месте приложения, которое делает такую ​​вещь, ниже приведен пример.

Пример первый:

realm.beginWrite()
conversation.unread += 1

 realm.add(message, update: Realm.UpdatePolicy.all)
 // Update Conversation Timestamp
 conversation.lastMessageTimestamp = message.timestamp

 do {
     try realm.commitWrite()
 } catch let error {
     log.debug("Unable to create Message")
     log.debug(error.localizedDescription)
     return
 }

Пример второй:

realm.beginWrite()
realm.add(newRealmMessage, update: Realm.UpdatePolicy.error)
// Update Conversation Timestamp
if let conversation = newRealmMessage.conversation {
    conversation.lastMessageTimestamp = newRealmMessage.timestamp
}

DispatchQueue.main.async {
    /*Some UI Modification*/
}

commit()

Естьв других местах, где я делаю похожие вещи и, кажется, получаю тот же результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...