Reviewers: Sven Panne,

Description:
Clean up ICU data tables on shutdown.

This is only used by d8 if compiled with external data tables, or an
embedder that uses external data tables and v8's version of ICU.

BUG=none
[email protected]
LOG=n

Please review this at https://codereview.chromium.org/210973007/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+22, -4 lines):
  M src/icu_util.cc


Index: src/icu_util.cc
diff --git a/src/icu_util.cc b/src/icu_util.cc
index 6441dbdd9f5fd98392a720d174fb7b4cebed7510..5ca9dbd5032e7ff8e05ce5544c723b17d9305753 100644
--- a/src/icu_util.cc
+++ b/src/icu_util.cc
@@ -33,6 +33,7 @@

 #if defined(V8_I18N_SUPPORT)
 #include <stdio.h>
+#include <stdlib.h>

 #include "unicode/putil.h"
 #include "unicode/udata.h"
@@ -49,6 +50,17 @@ namespace v8 {

 namespace internal {

+#if ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE
+namespace {
+char* g_icu_data_ptr = NULL;
+
+void free_icu_data_ptr() {
+  delete[] g_icu_data_ptr;
+}
+
+}  // namespace
+#endif
+
 bool InitializeICU(const char* icu_data_file) {
 #if !defined(V8_I18N_SUPPORT)
   return true;
@@ -70,6 +82,8 @@ bool InitializeICU(const char* icu_data_file) {
 #elif ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE
   if (!icu_data_file) return false;

+  if (g_icu_data_ptr) return true;
+
   FILE* inf = fopen(icu_data_file, "rb");
   if (!inf) return false;

@@ -77,15 +91,19 @@ bool InitializeICU(const char* icu_data_file) {
   size_t size = ftell(inf);
   rewind(inf);

-  char* addr = new char[size];
-  if (fread(addr, 1, size, inf) != size) {
-    delete[] addr;
+  g_icu_data_ptr = new char[size];
+  if (fread(g_icu_data_ptr, 1, size, inf) != size) {
+    delete[] g_icu_data_ptr;
+    g_icu_data_ptr = NULL;
     fclose(inf);
     return false;
   }
   fclose(inf);
+
+  atexit(free_icu_data_ptr);
+
   UErrorCode err = U_ZERO_ERROR;
-  udata_setCommonData(reinterpret_cast<void*>(addr), &err);
+  udata_setCommonData(reinterpret_cast<void*>(g_icu_data_ptr), &err);
   return err == U_ZERO_ERROR;
 #endif
 #endif


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to