Задача
========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.03) fd = open() в одном потоке (main)
4) select(fd) в другом
----Реультат
============select(fd) возвращает ошибку "Bad file descriptor"
На старой glibc 2.3.2 с linuxthreads ( без NPTL)
дискрипторы нормально разделялись.
Вопрос
==========
Если от схемы не уйти ( open в одном, select в другом), то как можно решить проблему?
Собрать с старым linuxthreads или можно указать что-нибудь при сборке с NTPL lib или ещё как-то?
Подскажите кто сталкивался.
А уверен, что поток с select вызывается не первее потока с open?
>А уверен, что поток с select вызывается не первее потока с open?
>Если запустить с LD_ASSUME_KERNEL=2.4.19 ( то есть точно со старым linuxthreads ),
то все нормально.Но так как софтина своя, то хочется
1) собрать её так чтобы она желизно использовала старую библиотеку linuxthreads (она есть в glibc)
или
2) использовать NPTL но с разделением ресурсов между потоками, как это и есть linuxthreadsНе могу найти четкой доки, везде советы с LD_ASSUME_KERNEL.
УЖОС какой-то. Ткните носом, plz.
>>А уверен, что поток с select вызывается не первее потока с open?
>
>Если запустить...Ты не ответил на вопрос. А похоже что это именно тот вопрос, который решает твою проблему.
Если у тебя select теоретически может вызываться до open, то с linuxthreads оно работало лишь по случайному совпадению и NPTL тут не при чем.
>>>А уверен, что поток с select вызывается не первее потока с open?
>>
>>Если запустить...
>
>Ты не ответил на вопрос. А похоже что это именно тот вопрос,
>который решает твою проблему.Сорри, все как обычно - рукаляпсус :
open(нужные файлы)
fork()
close(_ВСЕ_ открытые файлы)
...
select()