select bug?
Pavel Machek
pavel na bug.ucw.cz
Úterý Září 28 11:09:23 CEST 1999
Ahoj!
> : Chovani funkce select na pipy v linuxu mi prijde podivne.
>
> Hm - zaujimave. Chvilu som sa s tym hral a select
> vrati true skutocne az vtedy, ked je _vsetko_
> z pipy precitane. T.j. ak zapisem 2 bytes
> a precitam 1, select vrati 0. Az precitam
> dalsi, bude tam 1.
>
> Skusil som to aj medzi procesmi - funguje
> to rovnako.
>
> Ako "dovod" tipujem, ze zapisy do velkosti PIPE_BUF
> musia byt atomicke, v jadre je iba buffer tejto
> dlzky a niekomu sa mozno nechcelo sa s tym
> babrat (uz som sa tam raz vrtal, ked som nahanal
> mrznuci Netscape).
>
> IMHO jasny kandidat na otazku do linux-kernel.
> Poslete ju Vy, alebo mam pripadnu blamaz
> riskovat sam? :-)
Nechcete se pro zacatek podivat do zdrojaku?
...
...
pipe_poll(struct file *filp, poll_table *wait)
{
unsigned int mask;
struct inode *inode = filp->f_dentry->d_inode;
poll_wait(filp, PIPE_WAIT(*inode), wait);
/* Reading only -- no need for aquiring the semaphore. */
mask = POLLIN | POLLRDNORM;
if (PIPE_EMPTY(*inode))
mask = POLLOUT | POLLWRNORM;
####################################
if (!PIPE_WRITERS(*inode))
mask |= POLLHUP;
if (!PIPE_READERS(*inode))
mask |= POLLERR;
return mask;
}
Vypada to ze pollwrnorm se opravdu vraci az kdyz je pipa prazda... A
rekl bych ze PIPE_BUF je opravdu tim duvodem.
--
I'm really pavel na ucw.cz. Look at http://195.113.31.123/~pavel. Pavel
Hi! I'm a .signature virus! Copy me into your ~/.signature, please!
Další informace o konferenci Linux