Re: [PATCH 1/19] MUTEX: Introduce simple mutex implementation

Nikita Danilov
2005-12-15T15:52:48Z

Alan Cox writes:
> On Iau, 2005-12-15 at 16:41 +0300, Nikita Danilov wrote:
> > But this change is about fixing bugs: mutex assumes that
> >
> > - only owner can unlock, and
> >
> > - owner cannot lock (immediate self-deadlock).
>
> So add mutex_up/mutex_down that use the same semaphores but do extra
> checks if lock debugging is enabled. All you need is an owner field for
> debugging.

And to convert almost all calls to down/up to mutex_{down,up}. At which
point, it no longer makes sense to share the same data-type for
semaphore and mutex.

Also, (as was already mentioned several times) having separate data-type
for mutex makes code easier to understand, as it specifies intended
usage.

To avoid duplicating code, mutex can be implemented on top of semaphore,
like

struct mutex {
struct semaphore sema;
#ifdef DEBUG_MUTEX
void *owner;
#endif
};

or something similar.

>
> Now generate a trace dump on up when up and to check for sleeping on a
> lock you already hold (for both sem and mutex).

Sleeping on a semaphore "held" by the current thread is perfectly
reasonable usage of a generic counting semaphore, as it can be upped by
another thread.

>
> Alan

Nikita.