>> тут я с Вами не соглашусь - тут и анализ завершения и анализ наличия ошибки
> ой, да какого хрена разница. Если вернуться в начало, то вообще исходно
> разговор начался с того, что rust бы спас от этой проблемы.
> А то к чему мы пришли -- это спор о смыслах
> слов. Был программерский спор, стал лингвистический. То есть, мы залезли в
> оффтоп.безотносительно спора - ну как-бы о словах надо договариваться, чтобы не получилось, что мы говорим одно и тоже слово, но каждый под ним понимает что-то своё.
А так, скажем так, что у них получилось обработать ошибку, но не до конца.
>[оверквотинг удален]
> не стоит так делать, а если всё же делаешь, то надо
> ОЧЕНЬ сильно подумать, и потратить не менее получаса на поиск граблей,
> на которые можно наступить при этом. Но в rust'е это сильнее
> нельзя, потому что без unsafe'а сделать не удастся, а с unsafe'ом
> оно конечно можно, в смысле это могут принять другие, но только
> ежели unsafety не пересекает границ модуля. Здесь он пересекает. То есть
> g_dbus_connection_call должен быть unsafe вызовом (это лишь _соглашение_ растоманов,
> но они всё же следят за ним когда читают или пишут
> код). Ну а если мы начинаем использовать unsafe API, то гарантии
> раста, как бэ, подвисают в воздухе.
про Rust я не могу ничего сказать. как это в нём можно сделать вообще, и как именно делать лучше в частности.
>[оверквотинг удален]
> Которая, судя по её коду, заточена под то, что она будет вызвана
> дважды. На каждый асинхронный вызов она вызывает g_connection_call_finish. И что-то пишет
> в data, вне зависимости от того, как там сыграют ветки if'ов:
> она просто в разные места data пишет, в зависимости от if'ов.
> Если между этими двумя вызовами коллбека произойдёт return в polkit_system_bus_name_get_creds_sync,
> то второй вызов будет писать в удалённый стековый фрейм.
> edit:
>> делает какой-то single iteration судя по документации
> А, вот это похоже на правду. Надо полагать, что dangling указателя, всё
> же не возникает.
как по мне, код на C вполне себе элегантный, правда что так и не понятно - зачем они делают два вызова? неужели боятся, что по одному могут ответить гораздо медленнее, чем по второму, но не знают по какому? или то какое-то legacy осталось, типа давайте спросим так, а если нас не поняли, то тогда по другому.