Size: a a a

cxx.Дискуссионная

2020 September 07

LA

Liber Azerate in cxx.Дискуссионная
Э? Так я и не понял, какого это вообще происходило... Как мог порядок вызова деструкторов приводить к крашу?
источник

CC

Chris Calvin in cxx.Дискуссионная
Сочинение "как я провел лето в Киеве"
источник

Е

Егор in cxx.Дискуссионная
Alexander Zaitsev
збс приключения, я считаю
Ты точно не из Яндекса?
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
Liber Azerate
Э? Так я и не понял, какого это вообще происходило... Как мог порядок вызова деструкторов приводить к крашу?
я могу обьяснить, но это будет немного сложно
источник

LA

Liber Azerate in cxx.Дискуссионная
Alexander Zaitsev
я могу обьяснить, но это будет немного сложно
Давай, интересно же. Авось пойму
источник

Е

Егор in cxx.Дискуссионная
Alexander Zaitsev
я могу обьяснить, но это будет немного сложно
Го
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
оно легко, но просто громоздко
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
есть код
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
class ServiceClient {
   IClient m_client;
   IHttpClientFactory m_httpClientFactory;
}
источник

O

Ofee in cxx.Дискуссионная
Alexander Zaitsev
збс приключения, я считаю
А эти любители других языков всё продолжают напоминать тебе о том, какие ещё ошибки бы должен совершать в своём коде ><
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
вот что в нём может быть подозрительного?
источник

Е

Егор in cxx.Дискуссионная
Alexander Zaitsev
вот что в нём может быть подозрительного?
Колиент фабрика?
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
Егор
Колиент фабрика?
вполне себе норм класс - создаёт HttpClient ов всяких
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
а замес вот в чём
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
это нихуя не видно в этом коде
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
IClient внутри себя имеет тредпул
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
этот тредпул занят выполнением запросов в сеть
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
каждый поток выгребает запросы из очереди, создает httpClient у httpCLientFactory, и делает запрос
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
как вы могли догадаться, m_client внутри себя имеет ссылку именно на этот вот ебучий m_httpClientFactory
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
и что происходит:
1) Вызывается деструктор у ServiceClient
2) Соответствено вызываются деструкторы у подобьектов в порядке, обратном их обьявления в классе
3) То есть сначала вызывается деструктор у m_httpClientFactory
4) Но в это время тредпул внутри m_client всё ещё работает))))))))))) и если у него в очереди остались по какой-то неведомой мне причине запросы, то он их делает))) то есть он обращается по ссылке к m_httpClientFactory за клиентом, а там вместо фабрики уже хуй. Вот и крашится на этом месте
источник