- if ((file->f_mode & FMODE_READ)&&
- (fifo->rx_readp != fifo->rx_writep)) {
- mask |= POLLIN | POLLRDNORM;
- }
- if ((file->f_mode & FMODE_WRITE)&&
- (fifo->tx_readp == fifo->tx_writep)) {
- mask |= POLLOUT | POLLWRNORM;
+
+ if ((file->f_mode & FMODE_WRITE) && !(file->f_flags & O_SYNC)) {
+ poll_wait(file, &qends->endinfo.fileinfo.writeq, wait);
+
+ canque_for_each_inedge(qends, edge) {
+ if(canque_fifo_test_fl(&edge->fifo,FULL))
+ full=1;
+ }
+
+ if(!full)
+ mask |= POLLOUT | POLLWRNORM;
+ }
+
+ if ((file->f_mode & FMODE_WRITE) && (file->f_flags & O_SYNC)) {
+ poll_wait(file, &qends->endinfo.fileinfo.emptyq, wait);
+
+ canque_for_each_inedge(qends, edge) {
+ if(!canque_fifo_test_fl(&edge->fifo,EMPTY))
+ full=1;
+ }
+
+ if(!full)
+ mask |= POLLOUT | POLLWRNORM;