summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgangji@google.com <gangji@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-18 20:02:05 +0000
committergangji@google.com <gangji@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-18 20:02:05 +0000
commit9cc5821bb535cdb4c0f42a1475ca117bf7756090 (patch)
tree98488e4209f68475a9029e1940a770688228b253
parent6e24cf16fe291a8a1eae87f89538a76d690cd98f (diff)
downloadchromium_src-9cc5821bb535cdb4c0f42a1475ca117bf7756090.zip
chromium_src-9cc5821bb535cdb4c0f42a1475ca117bf7756090.tar.gz
chromium_src-9cc5821bb535cdb4c0f42a1475ca117bf7756090.tar.bz2
Fixing O2D crash in Windows XP. The original pixman uses thread local variable
which is not supported in Windows Xp. Bump third-party code to version 235 which has the fix in pixman. Now pixman uses TLS primitives. TESTED=manually tested under Windows 7/Windows XP using chrome, firefox and IE. Review URL: http://codereview.chromium.org/6688039 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@78739 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--o3d/DEPS2
-rw-r--r--o3d/build/pixman.gyp4
-rw-r--r--o3d/plugin/win/main_win.cc8
3 files changed, 13 insertions, 1 deletions
diff --git a/o3d/DEPS b/o3d/DEPS
index 866e90c..e616b26 100644
--- a/o3d/DEPS
+++ b/o3d/DEPS
@@ -5,7 +5,7 @@ vars = {
# revs to match the version pulled-in by Chromium's own DEPS in the new rev.
"chromium_rev": "51794",
"chromium_breakpad_rev": "50763",
- "o3d_code_rev": "234",
+ "o3d_code_rev": "235",
"skia_rev": "586",
"gyp_rev": "899",
"gtest_rev": "408",
diff --git a/o3d/build/pixman.gyp b/o3d/build/pixman.gyp
index 7c1aee7..8811b9d 100644
--- a/o3d/build/pixman.gyp
+++ b/o3d/build/pixman.gyp
@@ -54,6 +54,9 @@
{
'type': 'static_library',
'defines': [
+ # Build pixman with Windows XP support.
+ '_WIN32_WINNT=0x0502',
+ 'WINVER=0x0502',
'PACKAGE=pixman',
'PACKAGE_VERSION=""',
'PACKAGE_BUGREPORT=""',
@@ -90,6 +93,7 @@
'../../<(pixmandir)/pixman/pixman-timer.c',
'../../<(pixmandir)/pixman/pixman-trap.c',
'../../<(pixmandir)/pixman/pixman-utils.c',
+ '../../<(pixmandir)/pixman/pixman-win32-tls.c',
],
},
],
diff --git a/o3d/plugin/win/main_win.cc b/o3d/plugin/win/main_win.cc
index 1a1504d..f02b5bf 100644
--- a/o3d/plugin/win/main_win.cc
+++ b/o3d/plugin/win/main_win.cc
@@ -43,6 +43,7 @@
#include "core/cross/display_mode.h"
#include "core/cross/event.h"
#include "core/win/display_window_win.h"
+#include "pixman-win32-tls.h"
#include "v8/include/v8.h"
#if !defined(O3D_INTERNAL_PLUGIN)
#include "breakpad/win/exception_handler_win32.h"
@@ -739,6 +740,9 @@ NPError PlatformPostNPShutdown() {
// delete g_exception_manager;
#endif
+ // Clean up all pixman TLS entries.
+ pixman_win32_tls_shutdown();
+
return NPERR_NO_ERROR;
}
@@ -752,6 +756,10 @@ NPError PlatformNPPDestroy(NPP instance, PluginObject *obj) {
}
obj->TearDown();
+
+ // Clean up pixman TLS thread local storage.
+ pixman_win32_tls_shutdown_thread();
+
return NPERR_NO_ERROR;
}