|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
Есть такой код Код: 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.
Происходит зависание на выделенной строке, т.к. не вызывается EventCallback. Вообще. Это происходит при коннекте по xnet. Если я заменяю xnet:// на localhost: все работает. Если после зависания остановить службу Firebird, то EventCallback вызывается с параметрами (APtr, 0, nil); Версия сервераServer Version: WI-V3.0.7.33374 Firebird 3.0 Server Implementation: Firebird/Windows/AMD/Intel/x64клиент 32 битный. Где моя ошибка? Коду по работе с событиями уже много лет. Правда работал он только по TCP протоколу и с Interbase. С уважением, Vasilisk ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 16:05 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
_Vasilisk_Где моя ошибка? Как минимум - FillChar(FResult) там лишний. И есть подозрение, что клиент у тебя не той системы, поскольку такой баг замечен в Interbase 7. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 17:04 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Как минимум - FillChar(FResult) там лишний Dimitry Sibiryakov . И есть подозрение, что клиент у тебя не той системы Код: pascal 1. 2. 3. 4.
C:\WINDOWS\SYSTEM32\fbclient.dll: 3.0.7Да и послал бы меня клиент IB с xnet протоколом ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 17:44 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Как минимум - FillChar(FResult) там лишний. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 18:07 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
_Vasilisk_В смысле не нужен или вреден? Как минимум - не нужен. В зависимости от того как у тебя написал callback, может быть и вреден. Event block имеет внутреннюю структуру, включающую в себя имена событий, и обнулять его целиком чревато для функций, которым ты его потом будешь скармливать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 18:15 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Как минимум - не нужен. В зависимости от того как у тебя написал callback, может быть и вреден. Код: pascal 1. 2.
Я не знаю откуда это пошло. Код довольно старый и писался для Interbase. Тут или копипаста откуда-то или обход какого-то бага. Уже не скажу. Но сейчас проблема в том, что для xnet коллбек не вызывается вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 18:24 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
del ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 18:37 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
_Vasilisk_Но сейчас проблема в том, что для xnet коллбек не вызывается вообще. Теоретически это даже может быть правильным поведением: не произошло событие - не вызывается коллбэк. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 18:40 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Теоретически это даже может быть правильным поведением: не произошло событие - не вызывается коллбэк. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 18:42 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
_Vasilisk_Но во первых всегда требовался двойной вызов isc_que_events на старте. Это-то да, но оно могло быть и простым совпадением для случая когда у сервера счётчики событий уже прокручены от нуля. _Vasilisk_И при возникновении события коллбек все равно не вызывается И даже после второго события (поскольку у тебя там сразу идёт второе ожидание)? Тогда это точно баг. Как и в случае с Interbase, мой ответ "не используйте xnet". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 18:50 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov И даже после второго события (поскольку у тебя там сразу идёт второе ожидание)? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
то зависания нет, что логично, но коллбек вызывается только при дисконнекте от базы. События игнорируются Dimitry Sibiryakov Тогда это точно баг. Хотя вот сейчас проверили на другой машине тоже с 3.0.7, правда там сервер 32-х битный - все работает. Я боюсь сейчас в трекер соваться, без точных условий повторения Dimitry Sibiryakov мой ответ "не используйте xnet". ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 19:19 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
_Vasilisk_90%, что он появился в 3.0.7. Хотя вот сейчас проверили на другой машине тоже с 3.0.7, правда там сервер 32-х битный - все работает. Как я уже сказал, эта проблема впервые была замечена на IB7, то есть существует вероятность, что этот баг старый и поселился ещё в локальном протоколе. А в xnet его портировали не глядя. _Vasilisk_Ну обещали же новый и хороший протокол Он новый и хороший, но когда в нём починили колбэки на шифрование базы (и починили ли вообще) - я не помню. Очевидно, колбэки событий провалились в ту же яму с багами. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 19:25 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
_Vasilisk_, воспроизводимый пример есть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 19:25 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
hvlad воспроизводимый пример есть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 19:37 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
Собрал тест на VC - работает. Ушел сравнивать заголовки ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 21:01 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
_Vasilisk_ hvlad воспроизводимый пример есть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 22:04 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
hvlad На том, на чём воспроизводится :) Завтра буду копать дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2021, 23:49 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
Итак, воспроизводимый пример Импорты Код: 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.
функция ConnectToDB Код: 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.
EventCallback Код: 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.
функция WaitEvent Код: 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.
Тестирующая функция Код: sql 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.
вызов всего этого Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Зависания происходят в функции WaitEvent на выделенной строке Весь проект в аттаче. Примечания: 1. Иногда, один раз из 20-30 запусков после первого вызова isc_que_events коллбек вызывается и зависания не происходит 2. Имена событий должны быть строго такими. При уменьшении числа событий или именах Test1 .. Test8 все работает 3. Этот же код с этими же событиями замечательно работает в Visual Studio ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 22:37 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
_Vasilisk_, exe давай, мне нечем это компилировать. И не нужно зашивать имя БД в код, неужели так трудно его с ком. строки взять ? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2021, 23:48 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
hvlad exe давай, мне нечем это компилировать. Какая-то явная беда в синхронизации потоков hvlad неужели так трудно его с ком. строки взять ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2021, 00:21 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
_Vasilisk_, пока что мне совсем не нравится вызов isc_event_block с неопределёнными значениями LEvents[8] - LEvents[14]. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2021, 01:14 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
Вместо всей этой байды с ивентом можно просто первым вызвать isc_wait_event(). Всё то же самое, но "под ковриком". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2021, 01:30 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
hvlad пока что мне совсем не нравится вызов isc_event_block с неопределёнными значениями LEvents[8] - LEvents[14]. Dimitry Sibiryakov Вместо всей этой байды с ивентом можно просто первым вызвать isc_wait_event(). С этой функцией вроде получилось стабильно завешивать. Итак, обновленный код WaitEvent Код: 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.
Вот откомпилированный файл Запускать Код: powershell 1.
Блин! Решил продублировать код в VS. Теперь он без дебаггера опять перестал зависать. При том, что я его не трогал ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2021, 20:19 |
|
Зависание регистрации событий по xnet протоколу
|
|||
---|---|---|---|
#18+
Отладчик, в момент зависания на isc_wait_for_event показывает следующие стеки: Главный поток :7736171c ntdll.NtWaitForSingleObject + 0xc :762404e2 KERNELBASE.WaitForSingleObject + 0x12 :6b6c0470 ; C:\WINDOWS\SysWOW64\fbclient.dll :02b90b8c Два дополнительных потока, которые появились после вызова isc_wait_for_event :7736171c ntdll.NtWaitForSingleObject + 0xc :762404e2 KERNELBASE.WaitForSingleObject + 0x12 :6b6e468a ; C:\WINDOWS\SysWOW64\fbclient.dll Второй поток без стека, но остановлен на функции ntdll.RtlUserThreadStart fbclient.dll версии 3.0.7.33374 загружен по адресу 0x6B61000 Максимально близко к адресу 0x6b6e468a находится функция isc_start_transaction по адресу 0x6B6930A0 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2021, 21:03 |
|
|
start [/forum/topic.php?fid=40&fpage=9&tid=1560123]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
332ms |
get topic data: |
12ms |
get forum data: |
6ms |
get page messages: |
96ms |
get tp. blocked users: |
2ms |
others: | 235ms |
total: | 711ms |
0 / 0 |