John,

Lol.  You're full of little red ants.

--brian

On Fri, 10 Oct 2003, John A. Boyd Jr. wrote:

> Point taken, Brian, IF read & write close are to do exactly the same
> thing.  What it they are to be different?
> 
> This has become a philosophical debate, and unfortunately, as I've noted
> often lately, I don't have access here to any STREAMS docs (mine have
> been in storage for more than a year now).  So, I have to trust the
> rest of you on this kind of issue.  But, I don't take MG as
> authoritative, again, because it predates some important capabilities
> and some open/close-related semantics changes as a result.  I don't
> need my docs for that.
> 
> Dave G. can speak to this likely better than I, Dave L., but open and
> close semantics are different; that was the subject of the recent
> discussion "Opinions, please" that he started.  When the docs say
> that the driver open is called for each stream open, but close is
> called only for the last close, it may be referring to that aspect.
> But that doesn't preclude the last close from being two routines,
> each to be called, for the read and write queues resp.  I.e., there
> is possibly an ambiguity here.  I'm not trying to resolve it, but
> as in that case, I am doing what I can to identify it.
> 
> You may have a good point, though, Dave L., that if there are two
> different open routines, maybe both should be called.  Another
> possible ambiguity.  I just don't want us all rushing to judgement,
> and leaving LiS less flexible than it should be as a result.
> 
> My opinion is that when reading documentation meant not for
> implementors but for users, the implementor _must_ find and follow
> the broadest possible reading, not the most narrow.  The authors
> weren't likely writing to be as precisely followed as an implementor
> needs, but to be as easily understood as a user needs.
> 
> So, Brian, with all due respect to you, I think you have good
> points, but I also think your reading is too narrow, and thus has
> the effect of limiting flexibility.  I try to avoid that when I
> can; you certainly don't have to avoid it, though, if you don't
> want to.  We obviously make our implementation choices with
> different criteria in mind.
> 
> -John
> 
> Brian F. G. Bidulock wrote:
> > John,
> > 
> > One more point on this:
> > 
> > If the read close routine wants the write close routine called, it can
> > call it itself before returning:
> > 
> > int xxx_close(queue_t *q, int oflag, cred_t *credp)
> > {
> >     ...
> >     ...
> >     return WR(q)->qi_qinfo->qi_qclose(WR(q), oflag, credp);
> >     /* or even more directly xxx_wclose(WR(q), oflag, credp) */
> > }
> > 
> > So it really makes no sense for qdetach to be calling it in any event.
> > 
> > --brian
> > 
> > On Fri, 10 Oct 2003, Brian F. G. Bidulock wrote:
> > 
> > 
> >>John,
> >>
> >>On Fri, 10 Oct 2003, John A. Boyd Jr. wrote:
> >>
> >>
> >>>Dave G. - how about checking to see if they're the same, if both are
> >>>set, and if they are, call only one?  But otherwise, call whatever is
> >>>set, which may be both?
> >>>
> >>>I agree with you otherwise, though; I'd prefer to leave it as is.
> >>
> >>Why?  When it goes against documented STREAMS behavior?
> >>
> >>On the other hand, what about qi_qopen()?  Why are you not calling both
> >>qopens?  One with the read queue pointer and the other with ther write?
> >>
> >>Because its not done that way, of course.  And what is true for qopen()
> >>is true for qclose() in this case.
> >>
> >>--brian
> >>
> >>
> >>
> >>>-John
> >>>
> >>>David Lehmann wrote:
> >>>
> >>>>David Grothe wrote:
> >>>>
> >>>>
> >>>>>David:
> >>>>>
> >>>>>I think I see what is going on.  Consider the following lines from the 
> >>>>>trace:
> >>>>>...
> >>>>>Queues come in pairs.  This loop is examining each queue of the pair 
> >>>>>and calling the close routine for whichever queue has a pointer to a 
> >>>>>close routine.  Apparently your qinfo structure for your module has a 
> >>>>>pointer to the close routine for both the read and write queues.  It 
> >>>>>is conventional to only provide open/close routine pointers for the 
> >>>>>read queue.
> >>>>>
> >>>>>I think if you change your qinit structure the problem will go away.
> >>>>
> >>>>
> >>>>Maybe so, but this is the same code that Solaris uses.
> >>>>My understanding is that close should be called once and only once
> >>>>for the queue pair.  Maybe you should take John's suggestion and
> >>>>set do_close to zero after executing the close routine once.
> >>>>
> >>>
> >>>
> >>>_______________________________________________
> >>>Linux-streams mailing list
> >>>[EMAIL PROTECTED]
> >>>http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams
> >>
> >>-- 
> >>Brian F. G. Bidulock    � The reasonable man adapts himself to the �
> >>[EMAIL PROTECTED]    � world; the unreasonable one persists in  �
> >>http://www.openss7.org/ � trying  to adapt the  world  to himself. �
> >>                        � Therefore  all  progress  depends on the �
> >>                        � unreasonable man. -- George Bernard Shaw �
> >>
> >>_______________________________________________
> >>Linux-streams mailing list
> >>[EMAIL PROTECTED]
> >>http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams
> > 
> > 
> 
> 
> _______________________________________________
> Linux-streams mailing list
> [EMAIL PROTECTED]
> http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams

-- 
Brian F. G. Bidulock    � The reasonable man adapts himself to the �
[EMAIL PROTECTED]    � world; the unreasonable one persists in  �
http://www.openss7.org/ � trying  to adapt the  world  to himself. �
                        � Therefore  all  progress  depends on the �
                        � unreasonable man. -- George Bernard Shaw �

_______________________________________________
Linux-streams mailing list
[EMAIL PROTECTED]
http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams

Reply via email to