On 3/28/07, Tom Chen <[EMAIL PROTECTED]> wrote:
Guys, thanks for your help! Finally I find that this is because one thread holding mutex is preempted by a high priority timer (soft) interrupt which also seeks the same mutex. thus dead lock happens.
This alone should not be a problem. Unless your interrupt is high priority, there's nothing wrong with grabbing a mutex at interrupt level that's used elsewhere. Your use of timeout() is probably the problem; you need to be very careful: Don't take a lock within your timeout function that's held across schedulng it. That can lead to precisely the sort of cycle you're experiencing. (I think there's some notes on the timeout() manpage about this). Self re-scheduling using timeout() can be very tricky. If this is what you're doing then consider switching to use a cyclic function (see cyclic.h). Paul -- Paul Durrant http://www.linkedin.com/in/pdurrant _______________________________________________ networking-discuss mailing list [email protected]
