При многостраничной выдаче виснет Git, если выполняется из-под Far

Здесь можно сообщить о найденных багах в Far.
Post Reply
scarshock
Posts: 10
Joined: Mon 01 Feb, 2010 15:26
Has thanked: 1 time

При многостраничной выдаче виснет Git, если выполняется из-под Far

Post by scarshock » Mon 28 May, 2018 09:25

Суть проблемы в следующем: если Git генерирует вывода больше чем на одну страницу, есть некоторая вероятность, что Git повиснет. Сам Far не виснет, поэтому приходится прибивать дочерние процессы Git с помощью менеджера процессов. "Повиснет" означает, что выйти из многостраничной выдачи не предоставляется возможным, равно как и завершить сам Git с помощью Ctrl-C/Break. Постраничный вывод Git с помощью пейджеров отключён (т.е. команды типа git status, git add, git commit просто пишут в вывод без ожидания пользователя продолжить или прервать выдачу). Причём, судя по всему, такое поведение наблюдается только тогда, когда Git выдал весь результат, но по каким-то причинам виснет в самом конце. И, если прибить дочерний процесс Git, вероятность зависания при повторном запуске Git из-под того же экземпляра Far будет стремиться к единице.

Диаграмма процессов, примерно такова:
far.exe \-- git.exe (родительский процесс, не виснет) \-- git.exe (дочерний процесс, его нужно снять, чтобы родительский процесс "отпустило")
Думал, что эта проблема решается просто установкой по крайней мере версии Far из 2018, но ошибался. Проблема проявляется только при использовании связки [м.б. ConEmu+]Far+Git, но не Cmd+Git, или Cygwin Bash+Git.

Конфигурация:

- Windows 7 Ultimate 64
- Far Manager 3.0 build 5200 x86 (воспроизводилось и в более старых версиях)
- git version 2.13.3.windows.1 (возспроизводилось и в более старых версиях)

Где притаилась ошибка? Спасибо.

EDIT 1: Запуск `far -p -m` не устраняет проблему.
Last edited by scarshock on Mon 28 May, 2018 09:41, edited 2 times in total.

User avatar
DrKnS
Posts: 4862
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 150 times

При многостраничной выдаче виснет Git, если выполняется из-под Far

Post by DrKnS » Mon 28 May, 2018 11:32

scarshock wrote:
Mon 28 May, 2018 09:25
Проблема проявляется только при использовании связки [м.б. ConEmu+]Far+Git
Для начала убедитесь, что проблема не в квадратных скобках.

scarshock
Posts: 10
Joined: Mon 01 Feb, 2010 15:26
Has thanked: 1 time

При многостраничной выдаче виснет Git, если выполняется из-под Far

Post by scarshock » Mon 28 May, 2018 12:23

DrKnS wrote:
Mon 28 May, 2018 11:32
Для начала убедитесь, что проблема не в квадратных скобках.
Забыл убрать перед отправкой. ConEmu отношения к проблеме не имеет никакого.
Last edited by scarshock on Mon 28 May, 2018 12:25, edited 1 time in total.

User avatar
DrKnS
Posts: 4862
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 150 times

При многостраничной выдаче виснет Git, если выполняется из-под Far

Post by DrKnS » Mon 28 May, 2018 21:08

Позапускал git --no-pager log многократно, повторить не удалось.

scarshock
Posts: 10
Joined: Mon 01 Feb, 2010 15:26
Has thanked: 1 time

При многостраничной выдаче виснет Git, если выполняется из-под Far

Post by scarshock » Tue 29 May, 2018 19:41

А можно как-то просто и быстро проанализировать такой процесс? Допустим, у меня прямо вот сейчас висит дочерний git: я могу его каким-либо образом проинспектировать на предмет, к примеру, работы с I/O? Такое ощущение, что проблема именно в нём + процесс не отжирает процессорное время вообще и как бы спит. Или, может быть, ещё можно куда-то посмотреть, чтобы сузить область поиска проблемы?

User avatar
HaRT
Moderator
Posts: 8393
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 73 times
Been thanked: 126 times

При многостраничной выдаче виснет Git, если выполняется из-под Far

Post by HaRT » Tue 29 May, 2018 20:16

scarshock wrote:
Tue 29 May, 2018 19:41
просто и быстро проанализировать такой процесс?
Не знаю насчёт просто и быстро, но поскольку он с открытым кодом, то потенциально можно скачать исходники и отладочную информацию (и то, и другое в точности для той версии, которая запущена), подцепиться отладчиком и посмотреть, где висит и какая цепочка вызовов к этому привела.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Yegor
Posts: 901
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 3 times
Been thanked: 7 times

При многостраничной выдаче виснет Git, если выполняется из-под Far

Post by Yegor » Tue 29 May, 2018 20:32

DrKnS wrote:
Mon 28 May, 2018 21:08
git --no-pager log
Может как раз проблема в отсутствии этого аргумента?
Если без него запустить "git log" и нажать Ctrl+C, то можно наблюдать интересный эффект.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

scarshock
Posts: 10
Joined: Mon 01 Feb, 2010 15:26
Has thanked: 1 time

При многостраничной выдаче виснет Git, если выполняется из-под Far

Post by scarshock » Fri 01 Jun, 2018 18:52

@HaRT
Спасибо за наводку, но, стыдно сказать, с этим я вряд ли справлюсь -- у меня профиль немножко другой. Может, есть вариант со всякими мониторами типа Process Monitor. Тут, думаю, разберусь. По крайней мере, подходящий ли это инструмент. Ещё раз спасибо. :)

@Yegor
Там несколько запутаннее. По умолчанию пейджер, например, у `git status` отсутствует, что равнозначно `--no-pager` и всё-равно периодически приводит к зависанию. Но, если указать ключ `-p`, пейджер работает прекрасно, пока не попытаться выйти из него, нажав [Q], `git status` может повиснуть. Получается, что пейджер работает прекрасно сам по себе и здесь ни при чём. Как-то так.

scarshock
Posts: 10
Joined: Mon 01 Feb, 2010 15:26
Has thanked: 1 time

При многостраничной выдаче виснет Git, если выполняется из-под Far

Post by scarshock » Fri 01 Jun, 2018 19:40

Похоже, получилось поймать виновника проблемы. Запустив Process Monitor в глаза бросились два момента:

1) Дочерний процесс висит, и два git-процесса поочерёдно логируются монитором с операцией "Process Profiling". И так -- до бесконечности. Понятия не имею, что инициирует это событие, и что оно собой представляет здесь, но, может быть, это просто результат подвисания.
2) В логах засветился MacType64. Попробовал снять его хост- и агент-процессы -- git-процессы больше не подвисают.

Я, наверно, спрошу глупость, но, помимо того, что MacType внедряется в процессы, может быть, что это какой-то конфликт Far x86 и MacType64? Напомню, что проблема проявляется исключительно в случае запуска git из Far. Если запускать git из cmd, проблема не воспроизводится. Я полагал, что чисто консольные приложения MacType-ом не перехватываются никогда. Раздел [Exclude] из UserParams.ini, по всей видимости, тоже не работает. Попробую ещё обновить сам MacType.

Спасибо всем за дискуссию!

Post Reply

Return to “Глюки и баги”