-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
"error 20005" при последовательном монтировании нескольких ресурсов #14
Comments
Скажу больше: бывают спонтанные падения без видимых причин и даже какие-то зацикливания. Из-за этого убрал автоматическое определение статусов ресурсов из процедуры загрузки плагина. Скучно лицезреть черное окно. Подозреваю засады где-то в GIO, ну или некое непонимание, как ею правильно пользоваться. Уже есть проблема #6, тоже какая-то противоестественная. Если бы кто-нибудь нашел примеры использования плюсовой gtkmm (не C-интерфейса! Про него есть исходники из Debian), было бы очень здорово. |
Собственно, родные их мануалы, полагаю, можно не предлагать? http://www.gtkmm.org/en/documentation.shtml Навскидку: Ещё, если есть учётка на хабре, можно постучаться в автора вот этого: |
Не знаю, важно это или нет, но заметил странность: после "error 20005" кидает в папку предыдущего ресурса, которым пользовался через плагин. Не того, в который пытаешься зайти, а предыдущего. |
вот пример работы с gvfs в cpp и его обсуждение (можно, по идее, там попробовать в комментах задать вопросы): http://stackoverflow.com/questions/25739391/mounting-samba-share-in-c ещё пример работы с gvfs из плюсов: и ещё пример: https://docs.libreoffice.org/ucb/html/gio__content_8cxx_source.html и ещё, кажется, в wx есть какая-то поддержка gvfs: https://github.com/wxWidgets/wxWidgets/blob/master/src/gtk/gnome/gvfs.cpp вообще, если гуглить "Gio::MountOperation::create();", кое-что найти можно. |
после e8fb996 ошибки 20005 стали появлятся значительно реже. фактически, смог воспроизвести всего один раз, после многочисленных попыток монтирования-размонтирования разных ресурсов в случайном порядке. |
чёткая инструкция, как воспроизвести 20005:
|
можно ещё проще: монтировать несколько ресурсов один за другим. рано или поздно (обычно на 2-4 ресурсе) случается 20005. то есть, отмонтирование не является обязательным фактором возникновения этой ошибки. |
Эта ошибка появляется "со стороны" far. Он подключает ресурс на контроль (типа, чтобы извещения об изменениях видеть, но с нелокальными файловыми системами это не работает; во всяком случае, с farftp та же песня), но там возникает некая ошибка при попытке извлечь метаданные из файловой системы. Причем в лог валится что-то типа "TODO: decode error 5". А ресурс в это время уже подмонтирован, на самом деле. И совершенно справедливо отобразится на панели как подмонтированный. Такое впечатление, что там gvfs "не догоняет", не успевает подготовиться к какому-то системному вызову. Поэтому и ошибка всплывает далеко не всегда. Примеры все на C. Про такие исходники писано было сразу. Архитектура довольно зверская: в glib есть так называемые C-классы, что называется, "закат солнца вручную", когда разработчик прикидывается компилятором и делает часть его работы. Поверх них есть обертка C++, в которой своей функциональности почти нет. Однако, эта прослойка таки добавляет багов, очевидно. Ибо C-интерфейс и его вызовы работают нормально, что видно на примере того же gvfs-mount. Проявилась еще одна особенность: если связь прервалась, то ресурс остается какое-то время подмонтированным (на тайм-аутах транспортного протокола висит?). Спрашиваешь у GVFS: есть такой mount? Не моргнув глазом, отвечает: есть! И только попытка отмонтировать показывает, что mount уже протух. Если сразу попытаться смонтировать заново, выдает волшебную ошибку: сервис с именем ":<число>" не известен. Число с виду очень похоже на какой-то интервал времени от секунды до полутора. Откуда, из какого пальца это высасывается, если на вход подаешь тот же URL? Вторая попытка будет уже удачной (ну если связь есть). В общем, странностей в работе GVFS хватает. |
Вот у меня тоже сложилось впечатление, что проявление ошибки зависит от скорости монтирования ресурса (скажем, с роутером на openwrt sftp-соединение устанавливается довольно долго, и на нём ошибка возникает, кажется, чаще), но точную зависимость выявить пока не удалось, вот и не стал об этом писать.
Интересно, этот баг проявляется в консольном gvfs-mount? Т.е. это тоже баг лишнего уровня абстракции, или реализации? |
Феерический комментарий в исходниках glibmm (mountoperation.hg, строка 75):
Все-таки косяк где-то там. |
в момент установки соединения (smb, sftp).
при этом соединение всё равно устанавливается, то есть, если переоткрыть панель gvfs и попробовать "зайти" в ресурс - всё в порядке.
от чего зависит появление или не появление этой ошибки, я пока не понял. ищу.
The text was updated successfully, but these errors were encountered: