| /* |
| ****************************************************************************** |
| * * |
| * Copyright (C) 2001-2001, International Business Machines * |
| * Corporation and others. All Rights Reserved. * |
| * * |
| ****************************************************************************** |
| * file name: ucln_cmn.c |
| * encoding: US-ASCII |
| * tab size: 8 (not used) |
| * indentation:4 |
| * |
| * created on: 2001July05 |
| * created by: George Rhoten |
| */ |
| |
| #include "unicode/uclean.h" |
| #include "ucln_cmn.h" |
| #include "umutex.h" |
| #include "ucln.h" |
| |
| static cleanupFunc *gCleanupFunctions[UCLN_COMMON] = { |
| NULL, |
| NULL, |
| NULL |
| }; |
| |
| U_CAPI void U_EXPORT2 |
| ucln_registerCleanup(ECleanupLibraryType type, |
| cleanupFunc *func) |
| { |
| if (UCLN_START < type && type < UCLN_COMMON) |
| { |
| gCleanupFunctions[type] = func; |
| } |
| } |
| |
| U_CAPI void U_EXPORT2 |
| u_cleanup(void) |
| { |
| |
| ECleanupLibraryType libType = UCLN_START; |
| while (++libType < UCLN_COMMON) |
| { |
| if (gCleanupFunctions[libType]) |
| { |
| gCleanupFunctions[libType](); |
| } |
| |
| } |
| upropset_cleanup(); |
| unorm_cleanup(); |
| unames_cleanup(); |
| uchar_cleanup(); |
| locale_cleanup(); |
| uloc_cleanup(); |
| ustring_cleanup(); |
| UnicodeConverter_cleanup(); /* <-- deprecated code */ |
| ucnv_cleanup(); |
| ucnv_io_cleanup(); |
| ures_cleanup(); |
| udata_cleanup(); |
| putil_cleanup(); |
| |
| /* |
| * WARNING! Destroying the global mutex can cause synchronization |
| * problems. ICU must be reinitialized from a single thread |
| * before the library is used again. You never want two |
| * threads trying to initialize the global mutex at the same |
| * time. The global mutex is being destroyed so that heap and |
| * resource checkers don't complain. [grhoten] |
| */ |
| umtx_destroy(NULL); |
| } |
| |