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» с блокировкой по процессам. потому что решето фаерволом быть не может.

☆☆☆

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

Что-нибудь типа «your code clearly shows you have absolutely no clue how reliable thread-safe applications should be written; total lack of design and so many interdependent bugs that it's easier to rewrote the whole thing from scratch than to try fixing them».

Однако, после подобной реплики с некоторой вероятностью на твои патчи/сообщения вообще перестанут отвечать -> делу не поможет. Можешь попробоваться влиться в их команду и исправлять этот говнокод, сообщество тебе спасибо скажет.

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

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

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

как по-английски будет «гребаные бородатые ламеры

За этим к Линусу или к Тео.

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

Напиши замену. Нет, правда. Если времени, желания, сил хватит. Тебя, конечно, многие обзовут велосипедистом, зато будет конкурент dbus'у.

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

в ведре я такого кошмара пока не видел.

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

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

на С++11 - уже почти готово.

но ведь есть еще bluez который наглухо приколочен к glib и dbus. а его понять -у меня уже мозг треснул.

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

Запиливай ТЗ и создай проект на LOR-код. Общими усилиями, глядишь сделаем.

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

зато будет конкурент dbus'у

Уже сдохло несколько конкурентов dbus. Пока относительно жив plumber, но он тянет 9p.

x3al ★★★★★
()

Не по сабжу, но всё же. Ща вспомнил что вроде делался вёдерный dbus. Проект самозабанился?

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

уже видно что внутри одни костыли

Внутрь не заглядывал. Но и снаружи хватает. Чего только стоят описания интерфейсов на XML, и самовольный бесконтрольный запуск служб...

Мне кажется, что кто-то решил реализовать глючную версию CORBA. Без комитеткских заморочек, конечно. Но в таком виде ничго кроме лютых проблем с безопасностью не будет.

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

НЯП, в dbusе нет ничего такого, что бы требовало ведра. все межпроцессное взаимодействие в принципе сводится к unix sockets в каталоге /tmp

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

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

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

т.е. сервер/объект/интерфейс легко низводится до одного сокета по адресу /tmp/dbus-{uid}-{server_name}

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

их покусал какой-нибудь аналоги александреску только для голого Сэ.

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

ckotinko ☆☆☆
() автор топика
CONNECTION_LOCK(pending->conn);
...
if(!foo())return FALSE;
...
CONNECTION_UNLOCK(pending->conn);

ЫЫЫЫ... там реал такие лулзы?! Такую ж мять, как оно работает-то вообще... Начинаю прозревать откуда растут ноги с отдной мелкой но неуловимой багой в моей проге....

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

Таки не взлетело, а жаль, может качество кода было бы получше, пусть лезть в ведро есть тупость. Или хотя бы наличие конкуренции как-то повлияло бы...

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

пока нет. почти - это значит, пока не дописано.

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

http://maemo.org/api_refs/4.0/dbus/dbus-pending-call_8c-source.html

 dbus_bool_t
 dbus_pending_call_set_notify (DBusPendingCall              *pending,
                               DBusPendingCallNotifyFunction function,
                               void                         *user_data,
                               DBusFreeFunction              free_user_data)
 {
   _dbus_return_val_if_fail (pending != NULL, FALSE);
 
   CONNECTION_LOCK (pending->connection);
   
   /* could invoke application code! */
   if (!_dbus_pending_call_set_data_unlocked (pending, notify_user_data_slot,
                                              user_data, free_user_data))
     return FALSE;
   
   pending->function = function;
 
   CONNECTION_UNLOCK (pending->connection);
   
   return TRUE;
 }
ckotinko ☆☆☆
() автор топика
Ответ на: комментарий от ckotinko

причем этот код - это баг в баге.

потому что они аргумент калбэка меняют сняв блокировку. если придет сообщение все повалится

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

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

Гугль-трнаслят дает приблизительное такой пиривот: you are fucking bearded lamers, i wish you'll die in suffering and pain, and you'll stop writing your buggy code, 'cause your hands grow from the ass.

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

А здесь нет, обоснуй.

Да, точно, этоже прямое дополнение, ты прав.

theos ★★★
()

однако моих сил не хватит на переписывание dbusозависимых приложений с нуля.

Перепиши, чтобы было полностью совместимо с D-Bus, если сможешь. Я бы с радостью потестил, если это будет на C или C++.

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

Надо чтобы адресат плакал, а не смеялся. Не мог спать по ночам, пока не исправит код. Доброта на ЛОРе.

wbrer ★★★
()

Мне после этого треда страшно перезагружаться в линукс.

anonymous
()

Код ужасен, но лучше патчи слать, ИМХО.

Потому как вытеснить dbus - нереально, если ты не работашь в RedHat, и твою поделку автоматически не включат в следующую версию федоры.

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

Но лучше теб на ЭТО не смотреть, хуже расчленёнки чесслово.

Спасибо. Ну, не самый плохой код, который мне доводилось видеть. Форматирование странное, да. Меня в этом файле больше всего порадовало

#define CONNECTION_LOCK(connection) _dbus_connection_lock(connection)
#define CONNECTION_UNLOCK(connection) _dbus_connection_unlock(connection)

Это, видимо, означает «ЭТО MUTEX, НЕ ПРОСРИ!». Не помогло, просрали.

Ну и бич С-библиотек: от приставок _dbus_ ко всем функциям и типам в глазах рябит.

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

дефайны про масла масленного меня как-то не впечатляют

а вот «_dbus_ ко всем функциям и типам» и правда вырвиглазен, хотя тоже уже не впечатляет.

erfea ★★★★★
()

я ниразу не спец в ipc/dbus/sockets/threads/etc

но нашел это, когда удел что релизнулся 1.6. мож там чо интересного для тебя будет

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

Перепиши, чтобы было полностью совместимо с D-Bus, если сможешь.

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

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

Хуже то, что dbus должен был бы помогать «встретиться» процессам, использующим один X-сервер. А он поему-то помогает встретиться процессам, исполняющимся на одном хосте. Если уж переписывать, то делать межпроцессное взаимодействие через X-сервер. Тогда процессы, предоставлящие интерфейс к ресурсам (звуку, съёмным носителям, смарт-картам, камерам, и т.д.), смогут встретиться с процессами, которые хотят использовать эти ресурсы. Вот такой dbus, добавляющий сетевую прозрачность поверх X11 для ресурсов, был бы действительно правильным.

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

Вот такой dbus, добавляющий сетевую прозрачность поверх X11 для ресурсов, был бы действительно правильным.

Любитель очкового гландощекотания? Пойду-ка я в машину.

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

Если уж переписывать, то делать межпроцессное взаимодействие через X-сервер.

А ты ни разу не видел софт, умеющий dbus, но при этом запускающийся до иксов? Скорее всего у тебя такой запущен, кстати.

IPC поверх иксов уже был в кедах, умер. Помним, скорбим. И в иксах (с рождения) есть средства IPC, но юзать их для десктопного софта вместо dbus в здравом уме вряд ли кто будет.

сетевую прозрачность

А она, внезапно, есть для dbus. Называется telepathy (гуглить по telepathy pipes).

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

s/pupes/tubes/; s/юзать их/юзать их в голом виде/

x3al ★★★★★
()

Не ну если получится запилить реализацию dbus'а на C++11 причем более быструю и менее глючную, то думаю многие дистры её захотят заюзать, тот же Космонавт. Да и если она при этом окажется более портабельной, то есть без костылей в винде и Макоси взлетит, то вообще хорошо.

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

Х-сервер нафиг не нужен по моему скромному мнению. просто потому что в современных тулкитах он лишний уже давно. и по сетке он будет пересылать те же битмапы в итоге, как какой нибудь RDP. тогда уж лучше сделать wayland+RDP

что касается «доступа к ресурсам» то в LKML про это говорят уже год с чем-то. а воз и ныне там.

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

в винде я сделал через IoCompletionPort а в макоси - это надо макось. у мну её больше нет.

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