summaryrefslogtreecommitdiff
path: root/libs/pbd/locale_guard.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-03-30 15:18:43 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-03-30 15:18:43 +0000
commit14b0ca31bcb62e5b7e9e77634ef9cd2e8cf65800 (patch)
tree494bcf5351ff29d9981c22450863982b93a91a71 /libs/pbd/locale_guard.cc
parent10c257039df399fc5a9c383434ee19abab6199ed (diff)
handle deletion of UI objects between the time that a callback is queued with the UI event loop and the execution of the callback (intrusive, big)
git-svn-id: svn://localhost/ardour2/branches/3.0@6807 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/pbd/locale_guard.cc')
-rw-r--r--libs/pbd/locale_guard.cc17
1 files changed, 12 insertions, 5 deletions
diff --git a/libs/pbd/locale_guard.cc b/libs/pbd/locale_guard.cc
index 7d6c0708b8..30fdeadeba 100644
--- a/libs/pbd/locale_guard.cc
+++ b/libs/pbd/locale_guard.cc
@@ -8,15 +8,22 @@ using namespace PBD;
LocaleGuard::LocaleGuard (const char* str)
{
- old = strdup (setlocale (LC_NUMERIC, NULL));
- if (strcmp (old, str)) {
- setlocale (LC_NUMERIC, str);
- }
+ old = setlocale (LC_NUMERIC, NULL);
+
+ if (old) {
+ old = strdup (old);
+ if (strcmp (old, str)) {
+ setlocale (LC_NUMERIC, str);
+ }
+ }
}
LocaleGuard::~LocaleGuard ()
{
setlocale (LC_NUMERIC, old);
- free ((char*)old);
+
+ if (old) {
+ free ((char*)old);
+ }
}