Changes in directory llvm/lib/Support:
ManagedStatic.cpp added (r1.1) --- Log message: new helper class to provide more explicit management of static ctor/dtors. --- Diffs of the changes: (+53 -0) ManagedStatic.cpp | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 53 insertions(+) Index: llvm/lib/Support/ManagedStatic.cpp diff -c /dev/null llvm/lib/Support/ManagedStatic.cpp:1.1 *** /dev/null Wed Sep 27 19:32:05 2006 --- llvm/lib/Support/ManagedStatic.cpp Wed Sep 27 19:31:55 2006 *************** *** 0 **** --- 1,53 ---- + //===-- ManagedStatic.cpp - Static Global wrapper -------------------------===// + // + // The LLVM Compiler Infrastructure + // + // This file was developed by Chris Lattner and is distributed under + // the University of Illinois Open Source License. See LICENSE.TXT for details. + // + //===----------------------------------------------------------------------===// + // + // This file implements the ManagedStatic class and llvm_shutdown(). + // + //===----------------------------------------------------------------------===// + + #include "llvm/Support/ManagedStatic.h" + #include <cassert> + using namespace llvm; + + static const ManagedStaticBase *StaticList = 0; + + void ManagedStaticBase::RegisterManagedStatic(void *ObjPtr, + void (*Deleter)(void*)) const { + assert(Ptr == 0 && DeleterFn == 0 && Next == 0 && + "Partially init static?"); + Ptr = ObjPtr; + DeleterFn = Deleter; + + // Add to list of managed statics. + Next = StaticList; + StaticList = this; + } + + void ManagedStaticBase::destroy() const { + assert(Ptr && DeleterFn && "ManagedStatic not initialized correctly!"); + assert(StaticList == this && + "Not destroyed in reverse order of construction?"); + // Unlink from list. + StaticList = Next; + Next = 0; + + // Destroy memory. + DeleterFn(Ptr); + + // Cleanup. + Ptr = 0; + DeleterFn = 0; + } + + /// llvm_shutdown - Deallocate and destroy all ManagedStatic variables. + void llvm_shutdown() { + while (StaticList) + StaticList->destroy(); + } + _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits