LINUX.ORG.RU
ФорумTalks

[мега стабильность][ненависть] Х'ы. Повисли от создания окон

 


0

0

Сейчас случайно создал ркекурсию с созданиями окон.

Х'ы повислы, создам, судя по таскбару всго-то около 300 окон. Причем повисло все.

Пошел в консоль - убил прогу, отладчик. Вернулся в Х'ы - черный экран и «часики» на курсоре мышки.

Ну разве так можно?

★★★★

>Пошел в консоль - убил прогу, отладчик.
а винда бы просто повисла и всё, а как нужно-то?

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

легко

регистрируй в цикле классы окон. Шаряться они рабочую станцию (даже не на терминальную сессию).

Когда заюзаешь все отведеные классы - начнеться фантастика: начнет сыпаться GUI, потом сервесы (ибо многи использую GUI компоненты), нельзя будет открыть меню и нажать на кнопку

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

В винде тоже самое, если хэндлы израсходовать.

Это больше относится к 32-х битным виндам. В 64-х битных почти пофигу.

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

Запустил в vmware, долго думало. Ничего не показало.

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

>Не получилось. Начинает жутко свопиться, но не сыпется.

В Эльдорадо заходили и нажимали «meta - E», виста через 15 сек умирала.

linux4ever
()

а ещё есть какаянить инфа?

сколько оперативке в компе (?), ...
сколька swap на HDD (?), ...
сколько мегобайт занял процесс Xorg (?), ...
почему именно часики как курсор мышы (?) [не KDE-ли это оказалось?], ..

...(?)

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

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

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

> Это больше относится к 32-х битным виндам. В 64-х битных почти пофигу.

дело ну в битности дискриптора. Дело в ограничености их вообще

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

оперативы вроде 3Гб. Свопа на 6гб. 64 бита, 2ядерная корка

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

А вот сколько занял - не помню. Да, и все это Кедя

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

> Хотя в варкравт можно было продолжать играть.

До тех пор, пока ему не захочеться что-то создать

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

> В Эльдорадо заходили и нажимали «meta - E», виста через 15 сек умирала.

Надо будет как-нибудь попробовать...

question4 ★★★★★
()

Убог ваш KDE, у меня недавно Enter «запал»... сколько окон с file-roller открылось, я не знаю, но загрузило оба ядра под завязку открывая архив размером 4Мб и область вокруг окон стала жутко темной(использовались тени в compiz'е). Система конечно еле откликалась в состоянии постоянного обращения к винту, чтении содержимого архива и создания окон, но вполне успешно удалось закрыть пару окон мышкой, а потом перейдя в консоль грохнул все процессы и продолжил работу с системой.

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

у меня к винту даже не обращалась. Но тень была абсолютно черной.

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

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

> Иногда при компиляции линух так IO юзает, что о юзере забывает

кстате — мне кажется это довольно актуальная тема!

кто знает — в Linux-2.6.32 (или 2.6.33) это хоть чуть чуть поправили?

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

> Я как-то открыл 150 firefox'ов на 4 гигах и без свопа. Потом все killall'нул без проблем.

Я подумал и пришел к выводу, что проблема было не в 300 окнах. Скорее всего прилоежние успело отослать куда больше, чем 300 запросов на создания окна. Это действие ассинхроно, кто знает Х протокол?

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

дело ну в битности дискриптора. Дело в ограничености их вообще

В том то все и дело, что в 64-й битной системе эта граница куда выше.

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

> В том то все и дело, что в 64-й битной системе эта граница куда выше.

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

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

Скажем так, если у тебя что-там насоздаст 120 тыс. дескрипторов, хотя памяти останется свободно 2/3, все равно все будет жутко тормозить.

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

это да. но будет работать. и других пользователей не заденет

а тут сразу всю винду. заходишь гостем и ложишь машину

namezys ★★★★
() автор топика

Старая дока:

Some examples of the fundamental X Protocol requests that an application can make to a server are the following:

``Create Window"

A window is a logical rectangle on the screen, owned by particular application, into which graphics can be drawn.

``List Fonts"

To list fonts available to the application.

``Allocate Color"

Will define a color of the specified name or RGB value for later use.

``Create Graphics Context"

A Graphics Context is a definition of how graphics are to be drawn within a window--for example, the default background color, line style, clipping, and font.

``Get Selection Owner"

Find which window (possibly belonging to another application) owns the selection (i.e., a ``cut" of text).

In return, the server replies by sending events back to the application. The application is required to constantly poll the server for these events. Besides events detailing the user's mouse and keyboard input, there are other events, for example, that indicate that a window has been exposed (a window on top of another window was moved, thus exposing the window beneath it. The application should then send the appropriate commands needed to redraw the graphics within the window now on top). Another example is a notification to request a paste from another application. The file /usr/include/X11/Xproto.h contains the full list of X protocol requests and events.

http://rus-linux.net/MyLDP/BOOKS/rute/node46.html

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

Там много сорцов.

Но думаю что нить типа

void f() {
new QWidget;
f();
}

на 64 бита дадут тот же результат

А в доки про ассинхроность ничего не сказано :(

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

у меня сложнее. у меня стек возращался.

Фактически свелось к

while(1)
new QWidget;

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

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

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

Да пожалусто. Но только GDI ресурсы абсолютно точно привязаны к конкретное объекту Desctop. И если не использовать упрощеные ctrl+alt+del, а полноценный, который переключает дестопы и дает доступ к окну управления - то можно будет выйти

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

>ты хочешь сломать мне мозг и заполнить безполезной информацией?

Отнюдь. Информация, кстати, полезная, если уж дошло до досконального изучния. Я предпочитаю не гадать, а находить ответы на вопросы.

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

>Это действие ассинхроно, кто знает Х протокол?

Да, для отладки во многих приложениях даже есть ключ что то вроде --sync, чтобы вызовы были синхронные.

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

> Да, для отладки во многих приложениях даже есть ключ что то вроде --sync, чтобы вызовы были синхронные.

это должен тогда быть очень хитрый код, чтоб ассинхроно сохранять дескриптор в класс

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

а у меня на далекой проксе на клаву кто то что то положил и она в течении месяца в лог срала.

splinter ★★★★★
()

> Ну разве так можно?

memtest86 для начала, а потом стрес-тест ещё какой-нибудь

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