mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "David Schwartz" <davids@webmaster.com>
To: <larry.finger@lwfinger.net>
Cc: "LKML" <linux-kernel@vger.kernel.org>
Subject: RE: Question regarding mutex locking
Date: Wed, 28 Nov 2007 18:34:41 -0800	[thread overview]
Message-ID: <MDEHLPKNGKAHNMBLJOLKEEBHIIAC.davids@webmaster.com> (raw)
In-Reply-To: <474CFA64.8050608@lwfinger.net>


> Thanks for the help. Someday, I hope to understand this stuff.
>
> Larry

Any code either deals with an object or it doesn't. If it doesn't deal with
that object, it should not be acquiring locks on that object. If it does
deal with that object, it must know the internal details of that object,
including when and whether locks are held, or it cannot deal with that
object sanely.

So your question starts out broken, it says, "I need to lock an object, but
I have no clue what's going on with that very same object." If you don't
know what's going on with the object, you don't know enough about the object
to lock it. If you do, you should know whether you hold the lock or not.

Either architect so this function doesn't deal with that object and so
doesn't need to lock it or architect it so that this function knows what's
going on with that object and so knows whether it holds the lock or not.

If you don't follow this rule, a lot of things can go horribly wrong. The
two biggest issues are:

1) You don't know the semantic effect of locking and unlocking the mutex. So
any code placed before the mutex is acquired or after its released may not
do what's expected. For example, you cannot unlock the mutex and yield,
because you might not actually wind up unlocking the mutex.

2) A function that acquires a lock normally expects the object it locks to
be in a consistent state when it acquires the lock. However, since your code
may or may not acquire the mutex, it is not assured that its lock gets the
object in a consistent state. Requiring the caller to know this and call the
function with the object in a consistent state creates brokenness of varying
kinds. (If the object may change, why not just release the lock before
calling? If the object may not change, why is the sub-function releasing the
lock?)

DS



  reply	other threads:[~2007-11-29  2:34 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <fa.C9TdvYAhY8SablNc39IpD8WDnNM@ifi.uio.no>
2007-11-28  4:53 ` Robert Hancock
2007-11-28  5:19   ` Larry Finger
2007-11-29  2:34     ` David Schwartz [this message]
2007-11-29  7:56       ` Jarek Poplawski
2007-11-28  4:37 Larry Finger
2007-11-28  8:10 ` Matthias Kaehlcke
2007-11-28 14:46   ` Larry Finger
2007-11-28 15:00     ` Matthias Kaehlcke
2007-11-28 15:22 ` Andreas Schwab
2007-11-28 15:41   ` Larry Finger
2007-11-28 22:45     ` Jarek Poplawski
2007-11-28 22:56       ` Jarek Poplawski
2007-11-28 23:07         ` Jarek Poplawski
2007-11-28 23:33       ` Stephen Hemminger
2007-11-29  6:40         ` Jarek Poplawski
2007-11-30  1:13 ` Bryan O'Sullivan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MDEHLPKNGKAHNMBLJOLKEEBHIIAC.davids@webmaster.com \
    --to=davids@webmaster.com \
    --cc=larry.finger@lwfinger.net \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome