LINUX.ORG.RU

нужна помощь в переписывании dbus

 ,


2

6

я сегодня запостил 2 багрепорта в багзиллу dbusа и даже почти изготовил патчи. но когда стал раскапывать дальше, чтоб убедиться что патчи потокобезопасны, оказалось что нужно еще один багрепорт писать.

однако, моего уровня знания английского не хватает чтоб описать суть проблемы. я не знаю, как по-английски будет «гребаные бородатые ламеры, я хочу чтоб вы сдохли и больше не писали своих глюкодромов». и вообще как правильно написать им, что у них руки из жопы растут?

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

в итоге даже каллбек нельзя поставить потокобезопасно. в принципе, потому что вызок каллбэка не подперт мутексом.

да млъ у них вся багзилла состоит из слов sigsegv и crash. это решето в багзилле кстати сплошь sigsegv и crash

а чего стоит код вида:

CONNECTION_LOCK(pending->conn);
...
if(!foo())return FALSE;
...
CONNECTION_UNLOCK(pending->conn);
или комментарии вида «FIXME: мы вот тут не должны отпускать блокировку но вроде пока никого не убило, пусть так живет».

внутренний голос подсказывает мне, что это надо переписать. однако моих сил не хватит на переписывание dbusозависимых приложений с нуля. кого бы попросить помочь с тестированием в ближайшие 1-2 месяца?

от этого проекта, между прочим, зависит фаервол типа «agnitum outpost» с блокировкой по процессам. потому что решето фаерволом быть не может.

☆☆☆
Ответ на: комментарий от ckotinko

какой нибудь RDP

RDP - рассово не верный протокол... А так да в целом согласен, vnc нынче ефективнее для удаленного окна. Думаю со временем появится что-то типа waylandVNC композитор.

erfea ★★★★★
()
Ответ на: комментарий от hippi90

В том что топикстертер не оценил масштабы кода,и время потраченное на разработку.

Вот ради интереса-топикстартер покажи свой проект аналогичного масштабу dbus,или хотяб то что ты сделал идеально по твоему.

Вобщем детский максимализм,только так это выглядит.Или фанатизм.

И конечно намекаю топикстартеру-что за пол часа,даже за день,и даже за неделю ты никак не мог понять всего кода dbus,если ты уже работал с проектами такой сложности то оценилбы,и не орал со старта.

И насчет все криво-половина что тебе сейчас кажется криво,или теже перекрывающиеся/на соплях висящие условия и процессы-выяснится что это просто ты неправильно понял взаимодействие кода и по логике-то что ты написал-«а если вызов во время...то все развалится» просто неможет произойти.еще половина оставшегося-из-за твоего незнания подводных камней компилятора/или особенностей языка.И только небольшая часть будут реальные баги. Т.е. для понятия логики dbus-это сложно и долго.

И еще вот что-мне так показалось что топикстартер начал задумываться над защитой от дурака(в смысле дурака разработчика что понятия не имеет как работает система но хочет что она работала как ему нужно)...лучше ненадо

anonymous
()

По последней моде правильно: «DBus, fuck you!»

mv ★★★★★
()
Ответ на: комментарий от rand

вот тут вы не правы:

dbus_bool_t
_dbus_pending_call_set_data_unlocked (DBusPendingCall  *pending,
                                     dbus_int32_t      slot,
                                     void             *data,
                                     DBusFreeFunction  free_data_func)
{
  DBusFreeFunction old_free_func;
  void *old_data;
  dbus_bool_t retval;

  retval = _dbus_data_slot_list_set (&slot_allocator,
                                     &pending->slot_list,
                                     slot, data, free_data_func,
                                     &old_free_func, &old_data);

  /* Drop locks to call out to app code */
  CONNECTION_UNLOCK (pending->connection);
  
  if (retval)
    {
      if (old_free_func)
        (* old_free_func) (old_data);
    }

  CONNECTION_LOCK (pending->connection);
  
  return retval;
}
на выходе из него блокировка снова оказывается на месте

ckotinko ☆☆☆
() автор топика
Ответ на: комментарий от anonymous

мне вот лично срать, сколько времени потратили бородачи на разработку этой масштабной кучи дерьма. у меня есть event loop на основе libevent и в нем в несколько потоков работают разные сокеты и прочие прелести, и никто не гавкает. и только dbus как не от мира сего. какие-то функции ему подавай для того, чтоб он просирался,кишки торчат и т.д. и т.п.

мне нужно было всего лишь отправить запрос и прибить колбэк к pendingу. все навсего.

ckotinko ☆☆☆
() автор топика

... решето фаерволом быть не может.

как раз решето и есть «offline-фаервал», например для муки )

x905 ★★★★★
()
Ответ на: комментарий от ckotinko

не-а. От DBUS его можно отодрать гвоздодёром (у меня даже получилось). Только это кажется никому не нужно.

anonymous
()

все, кто сталкивался с dbus, знают, что это глюкодром)) ты ещё проверь, как там с race condition

dimon555 ★★★★★
()
Ответ на: комментарий от ckotinko

он будет пересылать те же битмапы в итоге, как какой нибудь RDP

Это VNC пересылает битмапы. А RDP и X пока что как бы не совсем. Впрочем, общими усилиями думаю таки добьются. С Qt 5 так точно

vasily_pupkin ★★★★★
()
Ответ на: комментарий от anonymous

закопаем вместе с поттерингом. кстати хорошая идея - задавать велосипедиста поттеринга новым велосипедом

ckotinko ☆☆☆
() автор топика

Я в dbus никогда не лазил, но вполне можно было бы разобраться и заняться этим летом.

Если у вас есть конкретные соображения по исправлению архитектуры, не слишком радикальные вроде «переписать все на C++», которые можно было бы запостить в список рассылки, а потом поэтапно реализовывать, я могу присоединиться :)

user_2190
()
16 января 2013 г.
Ответ на: комментарий от ckotinko

у меня есть event loop на основе libevent

Ну так в чем проблема? Если погуглить по словам «dbus libevent», то достаточно быстро находится пример, как это дело интегрируется в event loop. Хотя, честно говоря, п-ц еще тот.

Кстати, а лютая страхота творится в коде демона или в клиентской библиотеке?

anonymous
()
Ответ на: комментарий от anonymous

она там сплошь. спагетти из вызовов из одного файла в другой, оттуда в третий, потом обратно.

ckotinko ☆☆☆
() автор топика

А зашлите им пропатченные тесты, которые ломают эторешето. И пусть выкручиваются.

littlechris ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.