LINUX.ORG.RU
ФорумTalks

[глюкодром, говнокод] Gnome такой Gnome =)


0

0

С недавних под стал замечать, что rhythmbox *иногда* падает при изменении громкости. У меня даже получается это воспроизвести путём бешеного дёрганья соответствующего слайдера вверх-вниз (правда только на реальной системе, под VirtualBox'ом не вышло). Перед созданием нового багрепорта решил поискать и обнаружил, что редхатовская багзилла прямо таки завалена автоматически сгенерированными багрепортами по поводу падения ритмбокса при изменении громкости. Копнув чуть глубже я узнал, что проблема гораздо серьёзнее и старее =).

  • RHBZ #537711 - один из автоматически сгенерированных багрепортов
  • Gnome BZ #590431 - апстримовый багрепорт о падении ритмбокса
  • Gnome BZ #533427 (2008-05-16) - GObject properties not threadsafe - причина
  • Gnome BZ #166020 (2005!!!!!!-02-02) - проблема с многопоточностью оказывается не только у GObject'а...

ДОКОЛЕ?????!!!1

=)

Deleted

>GObject

Значит проблема глубоко в ГТК. Ибо нефиг делать ООП на языке, который его не поддерживает.

Yareg ★★★
()

Мыши.
Кактус.

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

>Ибо нефиг делать ООП на языке, который его не поддерживает.

Если такой умный, может и Линусу это объяснишь?

ttnl ★★★★★
()

сейчас придёт мужик2 и объяснит тебе, что так и нужно, а кто дёргает ползунок громкости, тот лох

overmind88 ★★★★★
()

>ДОКОЛЕ?????!!!1

До тех пор, пока десктопный софт будут писать студенты. Разве где-то в мануалах написано, что g_object_set_property потокобезопасный?

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

>Если такой умный, может и Линусу это объяснишь?

Linus и нетбуки, дубль два?

linuxfan
()

да, у меня на Убунту 64бит это стабильных баг, что ритмбоксовый звук во время воспроизведения менять == падение.

kost-bebix ★★
()

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

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

До тех пор, пока десктопный софт будут писать студенты. Разве где-то в мануалах написано, что g_object_set_property потокобезопасный?

Читаем мануал:

The functions g_object_ref/g_object_unref respectively increase and decrease the reference count.These functions are thread-safe as of GLib 2.8.

А теперь читаем последний багрепорт:

Various structures are refcounted in an unsafe way. This makes multithreaded applications fail at random. The most notable cases are signal emision (which refcounts various objects) and GObject refcounting.

Как говорится, ОПАНЬКИ!

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

и надо дергать не ползунок громкости а пинус, он то точно не упадет от этого

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

>не зря нокия гтк выкидывает.

От С++ - одни проблемы, так что зря.

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

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

Насколько я понял, в ритмбоксе падает не GUI, а какая-то часть gstreamer'а - gstobject, сделанный на основе gobject.

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

>Насколько я понял, в ритмбоксе падает не GUI, а какая-то часть gstreamer'а - gstobject, сделанный на основе gobject.

GTK - это все таки гуевый тулкит.

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

А теперь читаем еще раз:

>which refcounts various objects

Чтобы наглядно продемонстрирвать, спрошу: если a++ и b-- являются атомарными операциями, то разве это значит, что перенос единички из b в a будет атомарным: b--; a++ (или a++; b--)?

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

>Значит проблема глубоко в ГТК. Ибо нефиг делать ООП на языке, который его не поддерживает.

В стандарт C++ многопоточность не входит вообще. И что?

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

>Если такой умный, может и Линусу это объяснишь?

ЛОЛШТО. Покажи мне ООП в ядре. Для ядра C - идеальный язык. Также для консольных и, скорее, несетевых утилит.

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

перенос единички из b в a будет атомарным: b--; a++ (или a++; b--)?

А ты уверен что перенесется та самая единичка, а не другая? Иначе все это фуфел.

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

>А glib - нет =).

glib расчитана на асинхронную однопоточную модель выполнения программ. И если программист хочет сделать какие-то треды-воркеры, то они должны общаться с основным потоком при помощи эвентов.

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

Все единички в процессоре подключены к одному VCC, а значит, что все они - воплощение одной Единицы.

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

>А ты уверен что перенесется та самая единичка, а не другая?

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

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

А теперь читаем еще раз:

which refcounts various objects

Во первых: и что с того? Тем более, что в том контексте, в котором понимаешь эту фразу ты, ИМХО правильнее было бы написать different а не various...

Во-вторых: ты это в каком мануале читаешь?

Deleted
()

facepalm.patch...

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

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

о, великий, расскажи мне больше, что на чём я должен писать? И что будет с теми, кто ослушается твоих заветов?

thesame ★★★★
()
Ответ на: комментарий от no-dashi

Плюс ещё VFS чуть более чем полностью.

Deleted
()

Qt наше все!

ох щас срач-то будет...

opensuse
()
Ответ на: комментарий от no-dashi

Даже как-то не знаю... Наверное, я чего-то не понимаю... Нашёл struct inode, на вид так обычный себе сишный структ, предназначенный для объединения множества данных под одним именем...

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

Убунту 10.04 - не падает.

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

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

Значит, у меня очень хорошая карма. Еще никогда не видел падений ритмбокса.

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

В чем отличия вот этих двух фрагментов?

struct inode * my_inode = [...];
my_inode->i_fof->read(my_inode,buffer,count);
inode * my_inode = [...];
my_inode->i_fof->read(buffer,count);

Найди три отличия

Нашёл struct inode, на вид так обычный себе сишный структ

Нашел быдлокодера на ЛОРе. На вид обычный такой дурак...

no-dashi ★★★★★
()
Ответ на: комментарий от Yareg

> на вид так обычный себе сишный структ
В GObject тоже используется вполне себе C, что не мешает ему воплощать ООП. Надо же ж смотреть, как оно работает.

Gvidon ★★★★
()

Длительно использую rhythmbox (c ~ 2005 года) и сразу скажу - штуки типа firefox на порядок чаще падают, а что rhythmbox *иногда* падает при изменении громкости - не припомню такого что-то , увы.
Ради интереса в Debian Lenny где-то сотню менял уровень регулятором громкости в rhythmbox.

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

fix:где-то сотню менял -> где-то сотню раз менял ))

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

>Во-вторых: ты это в каком мануале читаешь?

От тредсейфности учета ссылок? Это в документации по GObject идет. Там даже отдельно рассматривают копирование или что-то в этом духе, когда надо сначала увеличивать счетчик у нового объекта, и только потом уменьшать у старого.

linuxfan
()
Ответ на: комментарий от no-dashi

Я нашёл, про что ты говоришь. Но та структура хранит в себе только ссылки на функции и, очевидно, нужна для того, чтобы к каждому inodу привязать функции специфичные именно для той фс, где он находится, и предоставить единый прозрачный интерфейс.

Понятно, что это очень похоже на ООП, но ООП не является.

А в GLib на C городят именно ООП с классами и прочим.

Yareg ★★★
()
Ответ на: комментарий от no-dashi

>В чем отличия вот этих двух фрагментов?

Второй read — это static-функция или кривой сиплюсплюс!

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

>Понятно, что это очень похоже на ООП, но ООП не является.

ООП — это не ключевые слова class/virtual/public/private/etc. ООП — это подход. Поймешь, когда вырастешь большой и умный.

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

а кто дёргает ползунок громкости, тот лох

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

a3
()

Ну вот, а мужик-2 мне не верил.. :)

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

>А в GLib на C городят именно ООП с классами и прочим.

Это ты klass имеешь ввиду? :))

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