[comp.unix.questions] URGENT STREAMS pseudodevice/kernel stream head question

MANNS%DBNPIB5.BITNET@cunyvm.cuny.edu (Jochen Manns, PI der Uni Bonn, 732738/3611) (03/11/91)

Dear STREAMS and kernel experts,

        I got a problem with a simple pseudodevice driver programmed by me.
        Long time, anything works fine but then suddenly a deadlock occures.
        This thing is very strang because of the following:
        - the program reading the pseudo device is in a _read and blocked
        - the streams head shows mit flags $3E or 076, which tells me:
          (QWANTR) someone up (_read) needs data (indeed)
          (QWANTW) someone from below has data (indeed)
          (QFULL) block by flow control (got 6k, flow allows 5k)
          (QREADR,QUSE) ok, the normal way
        and nothing happens. So how can QWANTR and QFULL set at one time,
        i.e. how can a _read block with 6k bytes of data waiting on the
        queue? I put all the data with 'putnext' to the queue, using a
        service procedure, 'canput' and whatever UNIX likes. What can be
        wrong?

        We are running DG/UX 4.31 on a Data General AViiON 300.

Thank you in advance


                        Jochen Manns
                        Physikalisches Institut der Universitaet Bonn
                        Nussallee 12
                        5300 Bonn 1
                        (Germany)