Message ID | 32b6764ce960a792b6f523d615ff160ef7d3d12e.1567534653.git.jag.raman@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Initial support of multi-process qemu | expand |
On Tue, Sep 03, 2019 at 04:37:28PM -0400, Jagannathan Raman wrote: > qemu_thread_cancel() added to destroy a given running thread. > This will be needed in the following patches. I don't see anything in the following patches that actually uses this new function. That is good though, because it is incredibly difficult to correctly use pthread_cancel() in such a way that you correctly release all memory and other resources (file descriptors) owned by the thread being cancelled. So this looks like it can thankfully be dropped. > > Signed-off-by: John G Johnson <john.g.johnson@oracle.com> > Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> > Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> > --- > include/qemu/thread.h | 1 + > util/qemu-thread-posix.c | 10 ++++++++++ > 2 files changed, 11 insertions(+) Regards, Daniel
On 9/4/2019 5:11 AM, Daniel P. Berrangé wrote: > On Tue, Sep 03, 2019 at 04:37:28PM -0400, Jagannathan Raman wrote: >> qemu_thread_cancel() added to destroy a given running thread. >> This will be needed in the following patches. > > I don't see anything in the following patches that actually uses > this new function. > > That is good though, because it is incredibly difficult to > correctly use pthread_cancel() in such a way that you correctly > release all memory and other resources (file descriptors) owned > by the thread being cancelled. > > So this looks like it can thankfully be dropped. Thanks Daniel. Will drop this in the next revision. -- Jag > >> >> Signed-off-by: John G Johnson <john.g.johnson@oracle.com> >> Signed-off-by: Jagannathan Raman <jag.raman@oracle.com> >> Signed-off-by: Elena Ufimtseva <elena.ufimtseva@oracle.com> >> --- >> include/qemu/thread.h | 1 + >> util/qemu-thread-posix.c | 10 ++++++++++ >> 2 files changed, 11 insertions(+) > > Regards, > Daniel >
diff --git a/include/qemu/thread.h b/include/qemu/thread.h index 55d83a9..78791be 100644 --- a/include/qemu/thread.h +++ b/include/qemu/thread.h @@ -156,6 +156,7 @@ void qemu_thread_create(QemuThread *thread, const char *name, void *(*start_routine)(void *), void *arg, int mode); void *qemu_thread_join(QemuThread *thread); +void qemu_thread_cancel(QemuThread *thread); void qemu_thread_get_self(QemuThread *thread); bool qemu_thread_is_self(QemuThread *thread); void qemu_thread_exit(void *retval); diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c index 1bf5e65..7c89071 100644 --- a/util/qemu-thread-posix.c +++ b/util/qemu-thread-posix.c @@ -573,3 +573,13 @@ void *qemu_thread_join(QemuThread *thread) } return ret; } + +void qemu_thread_cancel(QemuThread *thread) +{ + int err; + + err = pthread_cancel(thread->thread); + if (err) { + error_exit(err, __func__); + } +}