Ребят, исследую проблему падения своего плагина. Рука не повернулась запостить тему в баги, чую проблема моя.
В течение дня пользуюсь своим плагином сам. Уходя с работы лочу комп с включенными программами, на утром всегда нахожу крашдамп с довольно странным рекурсивным падением на вызове функции SetStartpupInfoW.
(баг-репорт не пролез по размеру сюда)
Не могу соринтироваться как эта функция может зарекурсится, код внутри довольно простой. Может быть связано со внутренним поведением Фара? Или имеет смысл искать у себя дальше? Думал проверить утечки, утром включил как обычно, сейчас днем по памяти все чинно красиво. Спасибо за помощь как всегда. Если я исчерпал свой лимит доброты на форуме, просьба дать знать)
SetStartupInfoW, STATUS_STACK_OVERFLOW
- zg
- zero-gravity
- Posts: 6135
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 194 times
- Contact:
SetStartupInfoW, STATUS_STACK_OVERFLOW
SetStartupInfoW вызывается один раз при загрузке плагина. когда вы уходите у вас плагин не загружен? если да, что приводит к его загрузке?
стек не выглядит, как стэк основного потока фара. единственный случай, который я знаю, когда плагин грузится фаром не из основного потока — это поиск. связано ли ваше падение с поиском?
и в целом апи фара не потокобезопасно, как в вашем плагине с этим обстоят дела?
стек не выглядит, как стэк основного потока фара. единственный случай, который я знаю, когда плагин грузится фаром не из основного потока — это поиск. связано ли ваше падение с поиском?
и в целом апи фара не потокобезопасно, как в вашем плагине с этим обстоят дела?
SetStartupInfoW, STATUS_STACK_OVERFLOW
Когда ухожу, оставляю Фар на, как правило, скрытом виртуальном десктопе (Win11), где плагин загружен и показывает свои диалоги. Только что подумал, что когда прихожу домой и слушаю музыку там, плагин 100% на залоченном компе получает апдейты и реагировать должен честно (поэкспериментирую с этим позже).
Специфичного кода для загрузки плагина у меня нету, только через меню плагинов. Потоки у меня есть: есть один вспомогательный, который опрашивает сервис, события винды слушает некоторые и забирает апдейты с сервиса, есть еще пул для асинхронных http запросов - тут точно мог накрутить. Поиска у меня нет вобще. Чудо.
Специфичного кода для загрузки плагина у меня нету, только через меню плагинов. Потоки у меня есть: есть один вспомогательный, который опрашивает сервис, события винды слушает некоторые и забирает апдейты с сервиса, есть еще пул для асинхронных http запросов - тут точно мог накрутить. Поиска у меня нет вобще. Чудо.
- zg
- zero-gravity
- Posts: 6135
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 194 times
- Contact:
SetStartupInfoW, STATUS_STACK_OVERFLOW
тут важно, вызываете ли вы из этих потоков какие-либо функции фар апи.igor wrote: Fri 04 Apr, 2025 15:55Потоки у меня есть: есть один вспомогательный, который опрашивает сервис, события винды слушает некоторые и забирает апдейты с сервиса, есть еще пул для асинхронных http запросов - тут точно мог накрутить.
если попробовать только фар+плагин, без других плагинов?
SetStartupInfoW, STATUS_STACK_OVERFLOW
Так, версия: в какой-то момент мой плагин сам закрывается, причину опустим, любая возможная. При этом поток в фоне остается и дергает какие-то стандартные Фаровые функции. Есть ли какие-то функции, может, которые могут инициировать перезагрузку плагина в этом случае?
Last edited by igor on Fri 04 Apr, 2025 16:05, edited 1 time in total.
SetStartupInfoW, STATUS_STACK_OVERFLOW
Очень даже легко: лукавить не буду, потоки добавлял в качестве эксперимента и не все еще дополировал.zg wrote: Fri 04 Apr, 2025 15:59тут важно, вызываете ли вы из этих потоков какие-либо функции фар апи.igor wrote: Fri 04 Apr, 2025 15:55Потоки у меня есть: есть один вспомогательный, который опрашивает сервис, события винды слушает некоторые и забирает апдейты с сервиса, есть еще пул для асинхронных http запросов - тут точно мог накрутить.
если попробовать только фар+плагин, без других плагинов?
- zg
- zero-gravity
- Posts: 6135
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 194 times
- Contact:
SetStartupInfoW, STATUS_STACK_OVERFLOW
DialogInit, Menu, InputBox, ShowHelp, Message, GetMsg, SettingsControl, GetPluginDirList явно грузят плягин, от имени которого их вызвали. что-то ещё, возможно, неявно. в любом случае, даже если плагин не выгружен, так делать нельзя. есть ACTL_SYNCHRO — нужно пользоваться ей.igor wrote: Fri 04 Apr, 2025 16:04Есть ли какие-то функции, может, которые могут инициировать перезагрузку плагина в этом случае?