Messages in this thread | | | Date | Sat, 20 Nov 1999 16:28:14 +0100 | From | Manfred Spraul <> | Subject | Re: [Patch] shm bug introduced with pagecache in 2.3.11 |
| |
Alan Cox wrote: > > > /* 3 asm instructions */ > > void release_exclusive(struct rw_mutex* rwm) > > { > > read_unlock(&rwm->rwl); > > if(rwm->wake_me_up) { > > rwm->wake_me_up = 0; > > wake_up(&rwm->wait); > > } > > } > > That can race with another acquire surely. Suppose they set rmw->wake_me_up > and we then continue our release and clear it.
But then we call wake_up(), we wake-up the second thread. Now the second thread either acquires the lock, or it sets the value back to 1. This should be OK.
> Actually why do you want the wake_me_up field ?
I thought that would simplify the code. But unfortunately, write_lock_trylock() is not atomic, and this means my proposal is impossible.
I'm searching for another solution. -- Manfred
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |