URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6367
[ Назад ]

Исходное сообщение
"open & select из разных потоков  NPTL"

Отправлено rmf , 13-Апр-07 12:42 
Задача
========

1) glibc 2.3.6
GNU C Library stable release version 2.3.6, by Roland McGrath et al.
Copyright (C) 2005 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21).
Compiled on a Linux 2.6.18 system on 2007-02-03.
Available extensions:
        GNU libio by Per Bothner
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        linuxthreads-0.10 by Xavier Leroy
        BIND-8.2.3-T5B
        libthread_db work sponsored by Alpha Processor Inc
        NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Thread-local storage support included.

2) -lpthread -D_REENTANT
слинковано с NPTL тредлибом
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0

3) fd = open() в одном потоке (main)

4) select(fd) в другом
----

Реультат
============

select(fd) возвращает ошибку "Bad file descriptor"

На старой glibc 2.3.2 с linuxthreads ( без NPTL)
дискрипторы нормально разделялись.


Вопрос
==========
Если от схемы не уйти ( open в одном, select в другом), то как можно решить проблему?
Собрать с старым linuxthreads или можно указать что-нибудь при сборке с NTPL lib или ещё как-то?
Подскажите кто сталкивался.



Содержание

Сообщения в этом обсуждении
"open & select из разных потоков  NPTL"
Отправлено Hordi , 13-Апр-07 17:39 
А уверен, что поток с select вызывается не первее потока с open?

"open & select из разных потоков  NPTL"
Отправлено rmf , 13-Апр-07 19:33 
>А уверен, что поток с select вызывается не первее потока с open?
>

Если запустить с LD_ASSUME_KERNEL=2.4.19 ( то есть точно со старым linuxthreads ),
то все нормально.

Но так как софтина своя, то хочется
1) собрать её так чтобы она желизно использовала старую библиотеку linuxthreads (она есть в glibc)
или
2) использовать NPTL но с разделением ресурсов между потоками, как это и есть linuxthreads

Не могу найти четкой доки, везде советы с LD_ASSUME_KERNEL.
УЖОС какой-то. Ткните носом, plz.


"open & select из разных потоков  NPTL"
Отправлено Michelnok , 14-Апр-07 13:45 
>>А уверен, что поток с select вызывается не первее потока с open?
>
>Если запустить...

Ты не ответил на вопрос. А похоже что это именно тот вопрос, который решает твою проблему.
Если у тебя select теоретически может вызываться до open, то с linuxthreads оно работало лишь по случайному совпадению и NPTL тут не при чем.


"open & select из разных потоков  NPTL"
Отправлено rmf , 14-Апр-07 15:32 
>>>А уверен, что поток с select вызывается не первее потока с open?
>>
>>Если запустить...
>
>Ты не ответил на вопрос. А похоже что это именно тот вопрос,
>который решает твою проблему.

Сорри, все как обычно - рукаляпсус :

open(нужные файлы)
fork()
close(_ВСЕ_ открытые файлы)
...
select()