summaryrefslogtreecommitdiffstats
path: root/maildrop/exittrap.h
diff options
context:
space:
mode:
Diffstat (limited to 'maildrop/exittrap.h')
-rw-r--r--maildrop/exittrap.h34
1 files changed, 34 insertions, 0 deletions
diff --git a/maildrop/exittrap.h b/maildrop/exittrap.h
new file mode 100644
index 0000000..e73571e
--- /dev/null
+++ b/maildrop/exittrap.h
@@ -0,0 +1,34 @@
+#ifndef exittrap_h
+#define exittrap_h
+
+
+#include "config.h"
+
+//////////////////////////////////////////////////////////////////////////
+//
+// ExitTrap implements exit traps - cleanup functions that must be called
+// in case of an abnormal program termination.
+//
+// This class does NOT do anything like trap signals, etcetera. The main
+// program should do that, and call onexit() in order to call the cleanup()
+// virtual function.
+//
+//////////////////////////////////////////////////////////////////////////
+
+class ExitTrap {
+
+ ExitTrap *next, *prev;
+ virtual void cleanup()=0;
+ virtual void forked()=0;
+ int callcleanup;
+protected:
+ void destroying() { callcleanup=0; }
+ void constructed() { callcleanup=1; }
+public:
+ ExitTrap();
+ virtual ~ExitTrap();
+
+static void onexit();
+static void onfork();
+} ;
+#endif