On 16/01/2015 09:03, Pavel Dovgaluk wrote: > There is one problem with protecting log file inside the replay code. > We probably should have the following sequence of calls: > > lock_replay_mutex > replay_save_events > replay_run_event > unlock_replay_mutex > > But replay_run_event can also generate some log events and we will have > deadlock here. > That is why we rely on global mutex.
I think replay_run_event should run with the lock _not_ taken, that is: qemu_mutex_lock(&lock); while (!QTAILQ_EMPTY(&events_list)) { Event *event = QTAILQ_FIRST(&events_list); QTAILQ_REMOVE(&events_list, event, events); qemu_mutex_unlock(&lock); replay_run_event(event); g_free(event); qemu_mutex_lock(&lock); } qemu_mutex_unlock(&lock); Paolo