This is the mail archive of the cygwin-patches@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] Reference counting on Audio objects for /dev/dsp


On Thu, Jul 15, 2004 at 09:44:34AM -0400, Igor Pechtchanski wrote:
>Gerd,
>
>I'd really like your comments on this patch.  As I reported before, it
>didn't quite work for me, but with the recent problems in testing another
>(presumably working) patch, I suspect my test procedure isn't quite
>correct anyway.  The patch basically adds a (very problem-specific)
>reference count to the Audio object(s), and doesn't delete the shared ones
>until all pointers are gone.  It doesn't seem to fix the bash redirection
>problem, but does allow the "dsp_dup_close" testcase to run (again, I'd
>like your opinion on whether it runs correctly).
>
>The ChangeLog below is just for the record -- as I said, I don't expect
>this to be checked in yet.
>	Igor
>==============================================================================
>ChangeLog:
>2004-07-06  Igor Pechtchanski  <pechtcha@cs.nyu.edu>
>
>	* fhandler_dsp.cc (fhandler_dev_dsp::Audio::reference_count_):
>	New instance variable.
>	(fhandler_dev_dsp::Audio::inc): New function.  Increment the
>	reference_count_.
>	(fhandler_dev_dsp::Audio::dec): New function.  Decrement the
>	reference_count_ and delete if zero.
>	(fhandler_dev_dsp::close): Replace delete with a call to dec().
>	(fhandler_dev_dsp::dup): Copy audio_in_ and audio_out_ and call
>	inc() on each.

Thanks for the patch.  I have two problems, though.

1) Some minor problems with GNU formatting:

  fhc->audio_out_ = audio_out_; if (audio_out_) audio_out_->inc ()

should be:

  fhc->audio_out_ = audio_out_;
  if (audio_out_)
    audio_out_->inc ()

nor is this:

  audio_out_ -> dec ();

should be:

  audio_out_->dec ();

2) The other problem is that I find it sort of odd to see the dec()
method performing a deletion.  Couldn't this be handled where, IMO,
it should logically be handled, in the close function, e.g.,

  if (!audio_out_->dec ())
    delete audio_out_;

?

cgf


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]