Re: [RFC][PATCH -mm 2/2] Freezer: Use wait queue instead of busy looping

Oleg Nesterov
2007-07-25T13:29:17Z

On 07/25, Rafael J. Wysocki wrote:
>
> void refrigerator(void)
> {
> @@ -50,6 +73,9 @@ void refrigerator(void)
> processes around? */
> long save;
>
> + refrigerator_called = 1;
> + wake_up(&refrigerator_waitq);
> +

This is a bit racy. Unless I missed something, the task should not set
refrigerator_called == 1 until it has PF_FROZEN.

Otherwise, try_to_freeze_tasks() can set refrigerator_called == 0 after
refrigerator() sets it == 1, the the main loop notices this unfrozen task,
and goes to sleep.

(I must admit, I agree with Pavel on that patch).

Oleg.