From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:50781) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TssG1-0000Pu-M5 for qemu-devel@nongnu.org; Wed, 09 Jan 2013 04:47:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TssFz-0002qU-JH for qemu-devel@nongnu.org; Wed, 09 Jan 2013 04:47:37 -0500 Received: from mx1.redhat.com ([209.132.183.28]:58428) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TssFz-0002qD-Am for qemu-devel@nongnu.org; Wed, 09 Jan 2013 04:47:35 -0500 Message-ID: <50ED3CAE.8010006@redhat.com> Date: Wed, 09 Jan 2013 10:47:26 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1357712290-16496-1-git-send-email-xiawenc@linux.vnet.ibm.com> In-Reply-To: <1357712290-16496-1-git-send-email-xiawenc@linux.vnet.ibm.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 1/2] oslib-win32: add lock for gmtime_r() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wenchao Xia Cc: stefanha@gmail.com, aliguori@us.ibm.com, qemu-devel@nongnu.org, quintela@redhat.com Il 09/01/2013 07:18, Wenchao Xia ha scritto: > Also changed the caller of gmtime() to gmtime_r(). Should be a separate patch. Also, what is the reason to add this lock? They are already protected by the BQL. Paolo > Signed-off-by: Wenchao Xia > --- > oslib-win32.c | 6 +++++- > vl.c | 4 ++-- > 2 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/oslib-win32.c b/oslib-win32.c > index e7e283e..74e0c52 100644 > --- a/oslib-win32.c > +++ b/oslib-win32.c > @@ -32,6 +32,8 @@ > #include "trace.h" > #include "qemu/sockets.h" > > +static GStaticMutex time_lock = G_STATIC_MUTEX_INIT; > + > void *qemu_oom_check(void *ptr) > { > if (ptr == NULL) { > @@ -74,15 +76,17 @@ void qemu_vfree(void *ptr) > VirtualFree(ptr, 0, MEM_RELEASE); > } > > -/* FIXME: add proper locking */ > +/* FIXME: add proper locking in MinGW */ > struct tm *gmtime_r(const time_t *timep, struct tm *result) > { > + g_static_mutex_lock(&time_lock); > struct tm *p = gmtime(timep); > memset(result, 0, sizeof(*result)); > if (p) { > *result = *p; > p = result; > } > + g_static_mutex_unlock(&time_lock); > return p; > } > > diff --git a/vl.c b/vl.c > index 79e5122..8d7864c 100644 > --- a/vl.c > +++ b/vl.c > @@ -454,12 +454,12 @@ void qemu_get_timedate(struct tm *tm, int offset) > ti += offset; > if (rtc_date_offset == -1) { > if (rtc_utc) > - ret = gmtime(&ti); > + ret = gmtime_r(&ti, tm); > else > ret = localtime(&ti); > } else { > ti -= rtc_date_offset; > - ret = gmtime(&ti); > + ret = gmtime_r(&ti, tm); > } > > memcpy(tm, ret, sizeof(struct tm)); >