From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48572) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WgBS6-0007Uo-Tt for qemu-devel@nongnu.org; Fri, 02 May 2014 07:16:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WgBS0-00048f-Nw for qemu-devel@nongnu.org; Fri, 02 May 2014 07:16:26 -0400 Received: from isrv.corpit.ru ([86.62.121.231]:45489) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WgBS0-00048D-GD for qemu-devel@nongnu.org; Fri, 02 May 2014 07:16:20 -0400 Message-ID: <53637E82.2080408@msgid.tls.msk.ru> Date: Fri, 02 May 2014 15:16:18 +0400 From: Michael Tokarev MIME-Version: 1.0 References: <536378E7.1090408@msgid.tls.msk.ru> <20140502110141.GQ22878@redhat.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 2/3] glib: add g_thread_new() compat function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell , "Daniel P. Berrange" Cc: qemu-devel , Stefan Hajnoczi 02.05.2014 15:08, Peter Maydell wrote: >>> Stefan Hajnoczi: >>>> +#if !GLIB_CHECK_VERSION(2, 31, 0) >>>> +static inline GThread *g_thread_new(const gchar *unused, >>>> + GThreadFunc func, >>>> + gpointer data) >>>> +{ >>>> + GThread *thread = g_thread_create(func, data, TRUE, NULL); >>>> + if (!thread) { >>>> + g_error("g_thread_create failed"); >>>> + } >>>> + return thread; >>>> +} >>>> +#endif >>> >>> About g_error(): >>> >>> "This function will result in a core dump; don't use it for errors you expect. >>> Using this function indicates a bug in your program, i.e. an assertion failure." > I'm not convinced we should be emitting any kind of > warning message here anyway -- surely it's up to the > caller to handle thread creation failure? The glib > warning/error functions presumably print to stderr, > which has all the usual issues with possibly messing > up guest output. Note that QemuThread &Co has exactly the same issue. void qemu_mutex_init(QemuMutex *mutex) { ... if (err) error_exit(err, __func__); } and so on in all util/qemu-thread-{posix,win32).c But yes, you're right, at least coroutine-gthread.c appears to try to handle errors by its own. So this is what's missing from my patchset for libcacard - since this one replaces qemu thread primitives (which aborts on error) with glib thread primitives (which return error condition instead). Thanks, /mjt