From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:56449) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tt8P4-0003kU-HE for qemu-devel@nongnu.org; Wed, 09 Jan 2013 22:02:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Tt8P1-0007Bd-Iy for qemu-devel@nongnu.org; Wed, 09 Jan 2013 22:02:02 -0500 Received: from e28smtp04.in.ibm.com ([122.248.162.4]:33792) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tt8P0-00079y-Uf for qemu-devel@nongnu.org; Wed, 09 Jan 2013 22:01:59 -0500 Received: from /spool/local by e28smtp04.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 10 Jan 2013 08:30:35 +0530 Received: from d28relay01.in.ibm.com (d28relay01.in.ibm.com [9.184.220.58]) by d28dlp03.in.ibm.com (Postfix) with ESMTP id E8F5A125804E for ; Thu, 10 Jan 2013 08:31:59 +0530 (IST) Received: from d28av02.in.ibm.com (d28av02.in.ibm.com [9.184.220.64]) by d28relay01.in.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r0A31fcV45285526 for ; Thu, 10 Jan 2013 08:31:44 +0530 Received: from d28av02.in.ibm.com (loopback [127.0.0.1]) by d28av02.in.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r0A31gRu006451 for ; Thu, 10 Jan 2013 14:01:42 +1100 Message-ID: <50EE2F01.5050804@linux.vnet.ibm.com> Date: Thu, 10 Jan 2013 11:01:21 +0800 From: Wenchao Xia MIME-Version: 1.0 References: <1357712290-16496-1-git-send-email-xiawenc@linux.vnet.ibm.com> <50ED3CAE.8010006@redhat.com> In-Reply-To: <50ED3CAE.8010006@redhat.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit 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: Paolo Bonzini Cc: stefanha@gmail.com, aliguori@us.ibm.com, qemu-devel@nongnu.org, quintela@redhat.com 于 2013-1-9 17:47, Paolo Bonzini 写道: > 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 > localtime_r() will be used in internal snapshot. I am not sure if it is already protected by BQL, if yes I think this can be dropped but add comments on API "need external lock". But with this lock API calling them can be tagged as "thread safe", which would be much nicer. >> 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)); >> > -- Best Regards Wenchao Xia