Bug 8706 - accept locks all thread subsystem
: accept locks all thread subsystem
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/guile16)
: unstable
: all Linux
: P2 blocker
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2005-12-22 16:16 by
Modified: 2008-04-25 16:50 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2005-12-22 16:16:08
guile> (define s (socket PF_UNIX SOCK_STREAM 0))
guile> (bind s AF_UNIX "/tmp/s3")
guile> (listen s 10)
guile> (define thr (begin-thread (let loop () (write "zzz\n") (sleep 5) (loop)))
... )
"zzz
"guile> 
guile> "zzz
"
guile> "zzz
"
guile> "zzz
"
guile> (accept s)
... <и тут больше сообщений не будет пока не пройдёт accept>
------- Comment #1 From 2005-12-22 16:16:44 -------
надо бы по больше severity
------- Comment #2 From 2008-02-21 16:45:58 -------
Вроде актуально :(
------- Comment #3 From 2008-04-22 17:09:25 -------
Причём не только для accept, но и для recv, send и всего комплекта функций
работы с сокетами. А если копнуть чуть глубже, то выяснится, что всё, что умеет
работать вместе с тредами, это операции с файловыми портами, usleep и sleep.
Всё. Любая другая блокирующая операция заблокирует весь процесс целиком.

Механизм для реализации обёрток в guile-1.6 есть. Делается всё довольно
тривиально, если я правильно понял как это работает. Так что если это
действительно необходимо, то я могу поправить accept и ещё немножко функций. :)
Отправлять патч в upstream вряд ли имеет смысл, хотя я могу посмотреть на 1.8,
может они так и забыли про эту "фичу". Ну что, исправляем?
------- Comment #4 From 2008-04-23 11:20:40 -------
даже и не знаю ... наверное можно подождать, вроде как уже свыкся со всеми
тараканами 1.6 ... кстати как по твоим ощущениям 1.8 .. стоит ли туда
переезжать?
Или 1.9 дождаться?
------- Comment #5 From 2008-04-23 14:19:58 -------
1.8 не щупал, если честно. По рассылки особых возмущений не вижу. Либо guile
уже
никто не использует, либо там всё в порядке. в любом случае попробовать стоит. 
В 1.8 эти блокировки в accept убраны, в send и в recv остались. :)

В общем, я патчик изготовлю и в пакет положу. Не будет у нас блокироваться
accept, как и в 1.8. Остальные функции пока трогать не буду.