summaryrefslogtreecommitdiffstats
path: root/libmail/runlater.H
diff options
context:
space:
mode:
authorSam Varshavchik2013-08-19 16:39:41 -0400
committerSam Varshavchik2013-08-25 14:43:51 -0400
commit9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch)
tree7a81a04cb51efb078ee350859a64be2ebc6b8813 /libmail/runlater.H
parenta9520698b770168d1f33d6301463bb70a19655ec (diff)
downloadcourier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2
Initial checkin
Imported from subversion report, converted to git. Updated all paths in scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'libmail/runlater.H')
-rw-r--r--libmail/runlater.H46
1 files changed, 46 insertions, 0 deletions
diff --git a/libmail/runlater.H b/libmail/runlater.H
new file mode 100644
index 0000000..995ac02
--- /dev/null
+++ b/libmail/runlater.H
@@ -0,0 +1,46 @@
+/*
+** Copyright 2002, Double Precision Inc.
+**
+** See COPYING for distribution information.
+*/
+#ifndef libmail_runlater_H
+#define libmail_runlater_H
+
+#include "libmail_config.h"
+#include "objectmonitor.H"
+
+#include <queue>
+
+/*
+** Local mail drivers are immediate - they implement the request and invoke
+** the callback function without delay. Some requests iterate over an entire
+** message set (such as mail::copyMessages). Each callback function
+** iterates to the next message. With large message sets the stack could
+** grow quite big. The solution is the mail::runLater interface. After
+** calling RunLater(), the caller MUST immediately terminate. The stack
+** will unwind back to mail::account::process(), which then invokes the
+** checkRunLater() method.
+*/
+
+LIBMAIL_START
+
+class runLater;
+
+class runLater : public mail::obj {
+public:
+ runLater();
+ ~runLater();
+
+ static std::queue<mail::ptr<runLater> > runningLater;
+
+ void RunLater();
+
+ virtual void RunningLater()=0;
+
+ static void checkRunLater(int &timeout);
+};
+
+LIBMAIL_END
+
+#endif
+