Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Mar 2003 14:07:35 -0800 (PST)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/kern subr_witness.c
Message-ID:  <200303112207.h2BM7Z46087687@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
jhb         2003/03/11 14:07:35 PST

  FreeBSD src repository

  Modified files:
    sys/kern             subr_witness.c 
  Log:
  - Split the itismychild() function into two functions:  insertchild()
    adds a witness to the child list of a parent witness.  rebalancetree()
    runs through the entire tree removing direct descendants of witnesses
    who already have said child witness as an indirect descendant through
    another direct descendant.  itismychild() now calls insertchild()
    followed by rebalancetree() and no longer needs the evil hack of
    having static recursed variable.
  - Add a function reparentchildren() that adds all the direct descendants
    of one witness as direct descendants of another witness.
  - Change the return value of itismychild() and similar functions so that
    they return 0 in the case of failure due to lack of resources instead
    of 1.  This makes the return value more intuitive.
  - Check the return value of itismychild() when defining the static lock
    order in witness_initialize().
  - Don't try to setup a lock instance in witness_lock() if itismychild()
    fails.  Witness is hosed anyways so no need to do any more witness
    related activity at that point.  It also makes the code flow easier to
    understand.
  - Add a new depart() function as the opposite of enroll().  When the
    reference count of a witness drops to 0 in witness_destroy(), this
    function is called on that witness.  First, it runs through the
    lock order tree using reparentchildren() to reparent direct descendants
    of the departing witness to each of the witness' parents in the tree.
    Next, it releases it's own child list and other associated resources.
    Finally it calls rebalanacetree() to rebalance the lock order tree.
  - Sort function prototypes into something closer to alphabetical order.
  
  As a result of these changes, there should no longer be 'dead' witnesses
  in the order tree, and repeatedly loading and unloading a module should no
  longer exhaust witness of its internal resources.
  
  Inspired by:    gallatin
  
  Revision  Changes    Path
  1.146     +144 -42   src/sys/kern/subr_witness.c

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-src" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200303112207.h2BM7Z46087687>