xintrea / mytetra_dev

MyTetra - smart crossplatform manager for information collecting / MyTetra - кроссплатформенный менеджер накопления информации / Официальная страница:
http://webhamster.ru/site/page/index/articles/projectcode/105
254 stars 55 forks source link

При нажатии Quit программа не выходит #59

Open strowk opened 7 years ago

strowk commented 7 years ago

При нажатии Quit программа не выходит (не исчезает из трея, не исчезает в процессах). То есть её можно открыть и увидеть там уже расшифрованные последние открытые записи. При этом ей невозможно нормально пользоваться - любое нажатие в окне игнорируется. Проблема не возникает сразу, а только через некоторое время, если открытой программой не пользоваться. Если открыть, ввести пароль и тут же открыть, то всё отрабатывает штатно, включая git синхронизацию. Логов нигде не нашёл, что надо выслать?

strowk commented 7 years ago

WA - убивать процесс, но это как-то не круто. Плюс, вероятно так синхронизация не происходит и можно потерять данные.

xintrea commented 7 years ago

Не понял последовательность действий.

Проблема не возникает сразу, а только через некоторое время, если открытой программой не пользоваться. Если открыть, ввести пароль и тут же открыть, то всё отрабатывает штатно, включая git синхронизацию.

Значит, вы запускаете программу и некоторое время ей не пользуетесь. Она просто висит в трее. Что потом вы делете? У вас несколько раз написано "открыть", и я не пойму что вы открываете.

Логов нигде не нашёл, что надо выслать?

Такой проблемы ранее не было. Поэтому лучше сделать скринкаст и выслать его, чтоб я своими глазами увидел что у вас происходит. Логи активируются в Инструменты - Настройки - Разное - Выводить отладочные сообщения в консоль. Перезапускаете MyTetra, доходите до проблеммного момента, копируете лог и высылаете.

Так же нужна информация по:

strowk commented 7 years ago

Значит, вы запускаете программу и некоторое время ей не пользуетесь. Она просто висит в трее. Что потом вы делете? У вас несколько раз написано "открыть", и я не пойму что вы открываете.

Я там слегка ошибся, надо

Если открыть, ввести пароль и тут же закрыть, то всё отрабатывает штатно, включая git синхронизацию.

Да, непонятно сформулировал. В некоторых местах под открыть имелось ввиду запустить программу, а в других развернуть из трея. Реально воспроизводилась эта проблема дважды в один и тот же день, с тех пор пока ещё не видел, если будет - соберу информацию - логи, скринкаст и пришлю. Ось windows 7 x64 на той машине, где это происходило. Дистрибутив брал тут http://webhamster.ru/site/page/index/articles/projectcode/105 - MyTetra v.1.42 для Windows У меня настроена синхронизация по доке http://webhamster.ru/site/page/index/articles/projectcode/170 и включено шифрование.

Сценарий такой - утром запустил программу, ввёл пароль, что-то поредактировал, свернул в трей. Через некоторое время (несколько часов) решил отойти и перед этим снять доступ, для этого жму правой кнопкой в значок в трее, нажимаю Quit - нет реакции, значок на месте. Жму по нему левой - появляется окно программы, не реагирующее ни на какие нажатия совершенно, повторные запросы в трей - меню - Quit тоже ни к чему не приводят. Нагрузка в процессах нулевая, после пары минут вырубил процесс и ушёл. Вернулся, запустил программу, поработал, попробовал закрыть (трей - меню - Quit) - закрылось корректно, открыл, ввёл пароль, снова что-то редактировал. Ближе к вечеру (ещё несколько часов) жму в трей - меню - Quit, снова зависло. Вырубил процесс. Потом опять запустил, ввёл пароль, и сразу попробовал через трей - меню - Quit, сработало нормально. То есть сразу после запуска вырубание не зависает, только после некоторого времени висения в трее.

xintrea commented 7 years ago

Попробуйте понаблюдать, не зависит ли такое поведение от двух вещей.

  1. На программу влияет антивирус. У вас установлен антивирус? Я так бодался с Касперским. Пока не прописал ему в исключения MyTetra, он периодически не давал выполняться процессу программы, и выглядело это именно так, как вы описываете.

  2. Не производилась ли в этот момент процедура фоновой синхронизации базы MyTetra? Понимаю, что отследить это не так то просто, но в команды синхронизации можно прописать команды записывания в лог-файл даты/времени старта синхронизации и окончания синхронизации. Если у вас зависал сам процесс синхронизации (стартанул, но не закончился), в логе будет видна строка времени старта, но не будет строки со временем завершения.

В MyTetra предусмотрена обработка параллельного потока, в котором запускается синхронизация, все это сделано средствами Qt. Но у меня была пара ситуаций, когда событийная модель Qt начинала глючить при использовании параллельного потока. Например, если отредактировать заголовок записи в середине автоматической синхронизации (кнопка синхронизации в этот момент становится неактивной, и это индикатор, что идет синхронизация), то пока синхронизация не закончится, не произойдет обновления списка записей на экране, и будет видно прежнее название записи. При этом другие события работают нормально - редактор работает, меню работает. Чем так не угодило обновление списка - пока загадка.

strowk commented 7 years ago

На программу влияет антивирус. У вас установлен антивирус? Я так бодался с Касперским. Пока не прописал ему в исключения MyTetra, он периодически не давал выполняться процессу программы, и выглядело это именно так, как вы описываете. Да, установлен именно он. Он вообще никак про программу не высказывается и в его логах я нашёл только упоминания о блокировке сетевых активностей на внутренние адреса

Не производилась ли в этот момент процедура фоновой синхронизации базы MyTetra? Понимаю, что отследить это не так то просто, но в команды синхронизации можно прописать команды записывания в лог-файл даты/времени старта синхронизации и окончания синхронизации. Если у вас зависал сам процесс синхронизации (стартанул, но не закончился), в логе будет видна строка времени старта, но не будет строки со временем завершения. Очень подозреваю, что производилась, я пока что включил это эксперементальное логгирование в настройках, может что-то выловит. Воспроизводится пару раз в неделю примерно.

xintrea commented 5 years ago

В общем, если идет фоновая синхронизация (это легко обнаружить по тому, что кнопка синхронизации становится в этот момоент неактивной), программа действительно не может закрыться. Видимо из-за того, что ее держит дочерний процесс, и Qt это как-то отслеживает. Пока решения нет, но баг не критический.