From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abramo Bagnara Subject: Re: rme9652: possible deadlock Date: Mon, 28 Apr 2003 14:47:00 +0200 Sender: alsa-devel-admin@lists.sourceforge.net Message-ID: <3EAD22C4.70309@libero.it> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: Errors-To: alsa-devel-admin@lists.sourceforge.net List-Help: List-Post: List-Subscribe: , List-Unsubscribe: , List-Archive: To: Jaroslav Kysela Cc: Jeremy Hall , "paul@linuxaudiosystems.com" , "alsa-devel@lists.sourceforge.net" List-Id: alsa-devel@alsa-project.org Jaroslav Kysela ha scritto: >>CPU1: >> >>read_lock(link_manager); read_lock(link_manager); >>spin_lock(s1); spin_lock(s2); >>if (stream_in_group) if (stream_in_group) >> spin_lock(group); spin_lock(group); /* Waiting */ >>spin_lock(s2); /* BOOM! */ >> >>I guess that 3rd version will be the one I propose ;-) > > > Yep, it is in CVS now ;-) Except I don't use trylock... > > read_lock(link_manager); > spin_lock(stream); > .... > if (stream_in_group) { > spin_lock(group); > spin_unlock(stream); > } > .... > link_for_each(s) { /* note that streams are locked in defined order now */ > if (stream_in_group) > spin_lock(s); > } > .... > list_for_each(s) { > if (stream_in_group) > spin_unlock(s); > } > .... > if (stream_in_group) { > spin_lock(stream); > spin_unlock(group); > } > .... > spin_unlock(stream); > read_unlock(link_manager); CPU1: CPU2: read_lock(link_manager); read_lock(link_manager); spin_lock(s1); spin_lock(s2); spin_lock(group); spin_lock(group); // waiting spin_unlock(s1); //inside list_for_each spin_lock(s1); spin_lock(s2); // BOOM! I fear you cannot avoid trylock ;-) -- Abramo Bagnara mailto:abramo.bagnara@libero.it Opera Unica Phone: +39.546.656023 Via Emilia Interna, 140 48014 Castel Bolognese (RA) - Italy ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf