[evolution-patches] [calendar] fix for 312462
- From: "Chakravarthi P" <pchakravarthi novell com>
- To: <evolution-patches lists ximian com>
- Subject: [evolution-patches] [calendar] fix for 312462
- Date: Tue, 16 Aug 2005 23:25:33 -0600
hi,
the following patch fixes
http://bugzilla.gnome.org/show_bug.cgi?id=312462
The access to the static variable saved_tz needs to
be synchronized to avoid this occasional e-d-s crash.
please review.
regards.
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/libical/ChangeLog,v
retrieving revision 1.172
diff -u -p -w -r1.172 ChangeLog
--- ChangeLog 12 Aug 2005 01:15:42 -0000 1.172
+++ ChangeLog 17 Aug 2005 05:18:49 -0000
@@ -1,3 +1,10 @@
+2005-08-16 P. S. Chakravarthi <pchakravarthi novell com>
+
+ Fixes #312462
+ * src/libical/icaltime.c (set_tz), (unset_tz) : make the code
+ accessing saved_tz synchronous by having an accessor and a release
+ function.
+
2005-08-12 Tor Lillqvist <tml novell com>
* src/libical/Makefile.am (libical_evolution_la_LIBADD): Add
Index: src/libical/icaltime.c
===================================================================
RCS file: /cvs/gnome/libical/src/libical/icaltime.c,v
retrieving revision 1.36
diff -u -p -w -r1.36 icaltime.c
--- src/libical/icaltime.c 15 Mar 2005 01:48:04 -0000 1.36
+++ src/libical/icaltime.c 17 Aug 2005 05:18:50 -0000
@@ -51,6 +51,11 @@
#define strcasecmp stricmp
#endif
+#ifdef HAVE_PTHREAD
+ #include <pthread.h>
+ static pthread_mutex_t tzid_mutex = PTHREAD_MUTEX_INITIALIZER;
+#endif
+
/*
* Function to convert a struct tm time specification
* to an ANSI time_t using the specified time zone.
@@ -317,13 +322,16 @@ char* set_tz(const char* tzid)
/* Add the new TZ to the environment. */
putenv(new_tz);
- /* Free any previous TZ environment string we have used. */
- if (saved_tz)
+ /* Free any previous TZ environment string we have used in a synchronized manner. */
+
+ if (access_saved_tz ())
free (saved_tz);
/* Save a pointer to the TZ string we just set, so we can free it later. */
saved_tz = new_tz;
+ release_saved_tz ();
+
return old_tz_copy; /* This will be zero if the TZ env var was not set */
}
@@ -346,13 +354,16 @@ void unset_tz(char *tzstr)
#endif
}
- /* Free any previous TZ environment string we have used. */
- if (saved_tz)
+ /* Free any previous TZ environment string we have used in a synchronized manner */
+
+ if (access_saved_tz ())
free (saved_tz);
/* Save a pointer to the TZ string we just set, so we can free it later.
(This can possibly be NULL if there was no TZ to restore.) */
saved_tz = tzstr;
+
+ release_saved_tz ();
}
/** Return the time as seconds past the UNIX epoch, using the
@@ -1151,3 +1162,33 @@ int icaltime_span_contains(icaltime_span
return 0;
}
+
+/* @brief gives access the static variable saved_tz synchronously
+ * @return The pointer to the saved_tz
+ *
+ */
+
+static char * access_saved_tz ()
+{
+
+ #ifdef HAVE_PTHREAD
+ pthread_mutex_lock (&tzid_mutex);
+ #endif
+ return saved_tz;
+
+}
+
+
+/* @brief releases the access to the static variable saved_tz synchronously
+ *
+ */
+
+static void release_saved_tz ()
+{
+
+ #ifdef HAVE_PTHREAD
+ pthread_mutex_unlock (&tzid_mutex);
+ #endif
+ return;
+
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]