Обсуждение: another ? lock freezing

Поиск
Список
Период
Сортировка

another ? lock freezing

От
"Hiroshi Inoue"
Дата:
Hi all,

I found another(??) lock freezing phenomenon.
Seems I'm guilty for the bug.

session-1begin;lock table a in share mode;

session-2begin;lock table a;[blocked]

session-3begin;lock table a in share mode;[blocked]

session-2^CCancel request sentERROR:  Query cancel requested while waiting lockabort;

session-1commit;
 Unfortunately LockReleaseAll() doesn't wake up session-3 and so session-3 is still blocked.

Either the cancel of session-2 or commit of session-1 must 
wake up session-3. I would change the cancel request stuff
so that it can wake up sleeping processes. 

Comments ?

Regards.

Hiroshi Inoue
Inoue@tpf.co.jp


RE: another ? lock freezing

От
"Hiroshi Inoue"
Дата:
> -----Original Message-----
> From: Alfred Perlstein [mailto:bright@wintelcom.net]
> 
> * Hiroshi Inoue <Inoue@tpf.co.jp> [000729 18:38] wrote:
> > Hi all,
> > 
> > I found another(??) lock freezing phenomenon.
> > Seems I'm guilty for the bug.
> > 
> [snip]
> > 
> > Either the cancel of session-2 or commit of session-1 must 
> > wake up session-3. I would change the cancel request stuff
> > so that it can wake up sleeping processes. 
> > 
> > Comments ?
> 
> The simplest and fairest way is to simply wake all the programs looking
> for a lock when that lock is released, it also simplifies the design.
>

Hmm,cancel request while waiting for a lock removes the waiting
lock from waitQueue not release the holding lock.
But you are right. It was my fault that I didn't wake up sleeping
processes in my implementation.

Regards.

Hiroshi Inoue