[llvm-commits] CVS: llvm/lib/Support/ManagedStatic.cpp
Chris Lattner
sabre at nondot.org
Wed Sep 27 17:32:11 PDT 2006
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();
+ }
+
More information about the llvm-commits
mailing list