summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSilenio Quarti <silenio>2009-06-03 19:08:57 +0000
committerSilenio Quarti <silenio>2009-06-03 19:08:57 +0000
commitb8a551181a182eae1ce380ca8b10dbe2b68d3d2c (patch)
tree7e8a4ceb47c6c0ad9a141790f5993e0741df88be
parent968cfd4347dd638a67216dabd8bd1b7f5a0edeef (diff)
downloadeclipse.platform.swt-b8a551181a182eae1ce380ca8b10dbe2b68d3d2c.tar.gz
eclipse.platform.swt-b8a551181a182eae1ce380ca8b10dbe2b68d3d2c.tar.xz
eclipse.platform.swt-b8a551181a182eae1ce380ca8b10dbe2b68d3d2c.zip
277713 - Crash (probably opening dialog with progress reporting in it)
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak2
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/common/library/callback.c13
2 files changed, 12 insertions, 3 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak
index 6d1055b173..4c5d8a5027 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/make_macosx.mak
@@ -31,7 +31,7 @@ AWT_OBJECTS = swt_awt.o
#NATIVE_STATS = -DNATIVE_STATS
#SWT_DEBUG = -g
-CFLAGS = -c -xobjective-c -Wall $(ARCHS) -DSWT_VERSION=$(SWT_VERSION) $(NATIVE_STATS) $(SWT_DEBUG) -DUSE_ASSEMBLER -DCOCOA \
+CFLAGS = -c -xobjective-c -Wall $(ARCHS) -DSWT_VERSION=$(SWT_VERSION) $(NATIVE_STATS) $(SWT_DEBUG) -DUSE_ASSEMBLER -DCOCOA -DATOMIC \
-I /System/Library/Frameworks/JavaVM.framework/Headers \
-I /System/Library/Frameworks/Cocoa.framework/Headers
LFLAGS = -bundle $(ARCHS) -framework JavaVM -framework Cocoa -framework WebKit
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/library/callback.c b/bundles/org.eclipse.swt/Eclipse SWT/common/library/callback.c
index 28a021fe8b..25e66053d2 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/common/library/callback.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/library/callback.c
@@ -31,6 +31,15 @@ static jint JNI_VERSION = 0;
static int counter = 0;
#endif
+#ifdef ATOMIC
+#include <libkern/OSAtomic.h>
+#define ATOMIC_INC(value) OSAtomicIncrement32(&value);
+#define ATOMIC_DEC(value) OSAtomicDecrement32(&value);
+#else
+#define ATOMIC_INC(value) value++;
+#define ATOMIC_DEC(value) value--;
+#endif
+
jintLong callback(int index, ...);
#ifdef USE_ASSEMBLER
@@ -682,7 +691,7 @@ jintLong callback(int index, ...)
}
/* Call into the VM. */
- callbackEntryCount++;
+ ATOMIC_INC(callbackEntryCount);
va_start(vl, index);
if (isArrayBased) {
int i;
@@ -714,7 +723,7 @@ jintLong callback(int index, ...)
}
}
va_end(vl);
- callbackEntryCount--;
+ ATOMIC_DEC(callbackEntryCount);
done:
/* If an exception has occurred in Java, return the error result. */