Получение SIGSEGV при одновременном чтении данных из коллекции Litedb в нескольких потоках - PullRequest
0 голосов
/ 13 апреля 2020

Я использую Litedb v4 в Xamarin, я создаю соединение liteDatabase и получаю коллекции внутри него один раз, и передаю коллекцию нескольким потокам, которые одновременно выполняют givenCollection.findALL().ToList(). Приложение иногда падает (не всегда), что приводит к ошибке SIGSEGV, я не понимаю, что является причиной этой ошибки.

Код для воспроизведения

protected async virtual Task<IEnumerable<T>> ReadAllItems<T>(LiteCollection<T> collection)
{
    return await Task.Run(() =>
    {
          return collection.FindAll().ToList();
     });
}

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

Это журнал, который я получаю:

  at <unknown> <0xffffffff>
  at System.String:FastAllocateString <0x00037>
  at System.String:CreateStringFromEncoding <0x000fb>
  at System.Text.UTF8Encoding:GetString <0x002a3>
  at LiteDB.BsonReader:ReadString <0x00143>
  at LiteDB.BsonReader:ReadElement <0x00227>
  at LiteDB.BsonReader:ReadDocument <0x0015b>
  at LiteDB.BsonReader:ReadElement <0x002af>
  at LiteDB.BsonReader:ReadDocument <0x0015b>
  at LiteDB.BsonReader:ReadElement <0x002af>
  at LiteDB.BsonReader:ReadArray <0x0015b>
  at LiteDB.BsonReader:ReadElement <0x0031f>
  at LiteDB.BsonReader:ReadDocument <0x0015b>
  at LiteDB.BsonReader:ReadElement <0x002af>
  at LiteDB.BsonReader:ReadDocument <0x0015b>
  at LiteDB.BsonReader:Deserialize <0x0009b>
  at LiteDB.QueryCursor:Fetch <0x003eb>
  at <Find>d__9:MoveNext <0x007a3>
  at <Find>d__13:MoveNext <0x00e63>
  at <Find>d__17:MoveNext <0x00593>
  at System.Collections.Generic.List`1:AddEnumerable <0x00287>
  at System.Collections.Generic.List`1:.ctor <0x0038f>
  at <>c__DisplayClass7_0`1:<ReadAllItems>b__0 <0x0013b>
  at System.Threading.Tasks.Task`1:InnerInvoke <0x000d7>
  at System.Threading.Tasks04-11 02:13:11.211 F/libc    
 (13977): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x1b in tid 14021 (Thread Pool Wor)
...