summaryrefslogtreecommitdiffstats
path: root/libmail/runlater.H
diff options
context:
space:
mode:
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
+