|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
Привет! Пишу ПО, которое использует FB на Orange Pi Zero (там стоит Linux). Если я посылаю "kill -SIGINT <pid>" своей программе, то она крашится, даже try..except не помогает. Кроме того, программу я запускаю из терминала (я через VNC-клиент захожу на Orange и там использую терминал), и после SIGINT терминал начинает себя странно вести (видимо, тоже где-то память или стек портится). Вот пример простого приложения на Лазаре, в котором проявляется эта ошибка. В нем я ставлю свой обработчик на сигналы типа SIGINT и SIGTERM. Отмечу, что проблема возникает при SIGINT и SIGTERM, а с SIGHUP все норм. код программы тут Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174.
В чем причина такого поведения? Как пофиксить или хотя бы workaround? DB: Firebird classic 2.5 Device: OrangePi Zero OS: ARMBIAN 5.35 user-built Ubuntu 16.04.3 LTS 3.4.113-sun8i ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 10:07 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
Дополню: на Ubuntu 18.04 это приложение при SIGINT выдает ошибку "invalid database handle (no active connection)", когда выполняется isc_detach_database. Но почему? Кто уже закрыл соединение? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 13:56 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
fbclient устанавливает свои обработчики этих сигналов. Они вызывают fb_shutdown, причём он выполняется в отдельном потоке. Для начала, нужно смотреть дамп (core) и понять - в каком месте оно падает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 14:11 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
Ставь свои обработчики сигналов после инициализации библиотеки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 14:21 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
sann-xДополню: на Ubuntu 18.04 это приложение при SIGINT выдает ошибку "invalid database handle (no active connection)", когда выполняется isc_detach_database.Т.е. не падает, всё в порядке ? sann-xНо почему? Кто уже закрыл соединение?fb_shutdown, см выше ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 14:27 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
hvladsann-xДополню: на Ubuntu 18.04 это приложение при SIGINT выдает ошибку "invalid database handle (no active connection)", когда выполняется isc_detach_database.Т.е. не падает, всё в порядке ? Не падает, да. Но там последняя версия из ветки 2.5. А на orange более ранняя 2.5 стоит. Да и не знаю, как сделать gcore процесса, если он уже завершен (упал после попытки закрыть соединение с БД). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 14:34 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
sann-xДа и не знаю, как сделать gcore процесса Попросить об этом систему (ulimit и т.д.). И лучше убери вызов ReleaseIBase60, а то гонка "кто из под кого выбьет табуретку" получается обоюдной: если ты выгрузишь библиотеку раньше, чем завершится упомянутый фоновый поток - он упадёт, если позже - упадёшь ты. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 14:40 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovСтавь свои обработчики сигналов после инициализации библиотеки. Замечательно! Превосходно! Супер! 3 дня с этим боролся! А все было так просто! Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 14:42 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovИ лучше убери вызов ReleaseIBase60, а то гонка "кто из под кого выбьет табуретку" получается обоюдной: если ты выгрузишь библиотеку раньше, чем завершится упомянутый фоновый поток - он упадёт, если позже - упадёшь ты. Совсем убрать? Или только в случае, когда придет сигнал типа SIGINT? Да и щас (по совету выше) я устанавливаю свой хэндлер сигналов уже ПОСЛЕ инициализиации библиотеки. Все равно убрать ReleaseIBase60 или как? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 14:46 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
sann-xСовсем убрать? Совсем убери. Ибо поток с shutdown - не единственные грабли на этом поле. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 14:49 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovСовсем убери. Ибо поток с shutdown - не единственные грабли на этом поле. А файл с моей БД валидный останется, не битый? Тем более тут я выложил тестовый пример, здесь нет смысла убирать. Но в моем приложении, которое я разрабатываю, используются компоненты типа TIBConnection, TSQLQuery и т.д. В TIBConnection внутри идет вызов InitialiseIBase60 и ReleaseIBase60. Как этим быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 14:55 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
sann-xА файл с моей БД валидный останется, не битый? Если ты работаешь с сервером, а не в embedded варианте, то всё будет в порядке. sann-xВ TIBConnection внутри идет вызов InitialiseIBase60 и ReleaseIBase60. Как этим быть? Вариантов два: заваливать трекер тикетами о некорректном поведении клиента или забить на падения/зависания. Есть ещё вариант разбираться индивидуально и самостоятельно править такие вот косяки, но это долго, муторно и требует квалификации. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 15:13 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovsann-xА файл с моей БД валидный останется, не битый? Если ты работаешь с сервером, а не в embedded варианте, то всё будет в порядке. У меня как раз embedded.. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 15:15 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
FB classic я поставил после, для тестов, уже когда стал исследовать баг в ПО. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 15:16 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
sann-xА файл с моей БД валидный останется, не битый? а) проверяй б) закрывай явно все коннекты до вызова fb_shutdown в) ещё проверяй ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 15:35 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
hvladб) закрывай явно все коннекты до вызова fb_shutdown Может, стоит написать в трекер, что shutdown из фонового потока не даёт основному приложению нормально завершить работу с базой? А то обработчики сигналов безусловно перекрывать это какой-то кривоватый костыль, может, клиент не только дурью в них мается, но и что-то полезное делает?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 17:15 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovМожет, стоит написать в трекер, что shutdown из фонового потока не даёт основному приложению нормально завершить работу с базойОтукуда такие сведения ? Dimitry Sibiryakovобработчики сигналов безусловно перекрыватьОни разве не вызываются по цепочке ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 18:18 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
hvladDimitry SibiryakovМожет, стоит написать в трекер, что shutdown из фонового потока не даёт основному приложению нормально завершить работу с базойОтукуда такие сведения ? Я еще раз проверю после праздников, чтобы точно знать ответ на этот вопрос. hvladDimitry Sibiryakovобработчики сигналов безусловно перекрыватьОни разве не вызываются по цепочке ? Код: pascal 1.
Ф-ция установки обработчика выдает старое значение, но я его игнорирую. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 18:58 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
hvladОтукуда такие сведения ? Из данного топика. hvladОни разве не вызываются по цепочке ? Это как запрограммируешь. fbclient их вызывает по цепочке. Приложение ТС-а (и моё) - нет. Поэтому когда приложение устанавливает свой обработчик позже клиентского, ловит сигнал и не даёт обработчику в клиенте выполниться, оно может спокойно закончить текущую операцию, закоммитить транзакцию, отсоединиться и т.д. В противном случае выполняется обработчик в клиенте, потом в приложении, но к моменту когда приложение не торопясь завершает операцию - шустрый фоновый поток клиента уже убил всё что мог и приложение получает вышеназванную ошибку. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 20:11 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovВ противном случае выполняется обработчик в клиенте, потом в приложении, но к моменту когда приложение не торопясь завершает операцию - шустрый фоновый поток клиента уже убил всё что мог и приложение получает вышеназванную ошибку. Да, так и происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 20:17 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovприложение получает вышеназванную ошибку.И чем она ему мешает ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 02:35 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
hvladИ чем она ему мешает ? Мне нужно сохранить работу на диск, когда программа закрывается, иначе данные (могут быть важными для клиента) могут быть потеряны. А ошибка приводит к тому, что даже try except не срабатывает и программа вылетает, не сохранив все до конца. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 08:09 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
sann-x, 1. fb_shutdown как раз корректно закрывает коннекты и всё сохраняется 2. Не нравится, что клиент автоматом вызывает fb_shutdown ? А почему он это делает ? Так может что-то в консерватории не так ? 3. Программа вылетает на Ubuntu 16.04 и не вылетает на Ubuntu 18.04 но виноват, конечно же, Firebird ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 12:22 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
hvladИ чем она ему мешает ? Продолжению работы. Ты не поверишь, но не все программы тупо закрываются по нажатию Ctrl-C, некоторые считают себя достаточно важными и переспрашивают у пользователя "я ещё не всё сохранила, ты действительно хочешь наплевать на два дня проделанной работы?" hvlad1. fb_shutdown как раз корректно закрывает коннекты и всё сохраняется При этом текущая транзакция откатывается, что несколько противоречит "всё сохраняется". hvlad2. Не нравится, что клиент автоматом вызывает fb_shutdown ? А почему он это делает ? Потому что кое-кто не смог придумать лучшего способа для cleanup. Использовать, как все люди, destructor-функции, видимо, показалось слишком просто. hvladТак может что-то в консерватории не так ? Да. И я даже знаю в чьей именно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 13:17 |
|
Сбой приложения если оно получило SIGINT или SIGTERM
|
|||
---|---|---|---|
#18+
hvlad3. Программа вылетает на Ubuntu 16.04 и не вылетает на Ubuntu 18.04 но виноват, конечно же, Firebird Учитывая, что имеют место быть гонки потоков, результат ещё и от фазы Луны зависит. И таки да, виноват, конечно же, Firebird. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.11.2018, 14:09 |
|
|
start [/forum/topic.php?fid=40&msg=39727536&tid=1560920]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 261ms |
0 / 0 |