p->thread_fn = thread_fn;
p->thread_data = thread_data;
p->state = TASK_UNINTERRUPTIBLE;
+ p->signal = &p->_signal;
atomic_set(&p->usage, 1);
init_completion(&p->exited);
+ init_rwsem(&p->_signal.exec_update_lock);
pthread_attr_t attr;
pthread_attr_init(&attr);
ret = pthread_create(&p->thread, &attr, kthread_start_fn, p);
if (ret)
- die("pthread_create error %s", strerror(ret));
+ return ERR_PTR(-ret);
pthread_setname_np(p->thread, p->comm);
return p;
}
return test_bit(KTHREAD_SHOULD_STOP, ¤t->kthread_flags);
}
+bool kthread_freezable_should_stop(bool *was_frozen)
+{
+ return test_bit(KTHREAD_SHOULD_STOP, ¤t->kthread_flags);
+}
+
/**
* kthread_stop - stop a thread created by kthread_create().
* @k: thread created by kthread_create().