summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2011-11-09 13:52:13 +0000
committerthomascube <thomas@roundcube.net>2011-11-09 13:52:13 +0000
commitad71ba4fcd52a444452209460e19f63fefc59839 (patch)
tree9a62e057cb5202425dba29a97cf8416da1bd0480
parent51f7a5b2a09777d3a279757af620e42985ff9a86 (diff)
Backporting r5403 to release branch
-rw-r--r--program/include/rcube_session.php12
-rw-r--r--program/steps/mail/compose.inc8
2 files changed, 20 insertions, 0 deletions
diff --git a/program/include/rcube_session.php b/program/include/rcube_session.php
index e8bd9d06c..22aa55016 100644
--- a/program/include/rcube_session.php
+++ b/program/include/rcube_session.php
@@ -394,6 +394,18 @@ class rcube_session
/**
+ * Re-read session data from storage backend
+ */
+ public function reload()
+ {
+ if ($this->key && $this->memcache)
+ $this->mc_read($this->key);
+ else if ($this->key)
+ $this->db_read($this->key);
+ }
+
+
+ /**
* Serialize session data
*/
private function serialize($vars)
diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc
index 6961bf86a..c527ce15f 100644
--- a/program/steps/mail/compose.inc
+++ b/program/steps/mail/compose.inc
@@ -31,6 +31,14 @@ $MESSAGE = NULL;
$COMPOSE_ID = get_input_value('_id', RCUBE_INPUT_GET);
$_SESSION['compose'] = $_SESSION['compose_data_'.$COMPOSE_ID];
+// give replicated session storage some time to synchronize
+$retries = 0;
+while ($COMPOSE_ID && !is_array($_SESSION['compose']) && $RCMAIL->db->is_replicated() && $retries++ < 5) {
+ usleep(500000);
+ $RCMAIL->session->reload();
+ $_SESSION['compose'] = $_SESSION['compose_data_'.$COMPOSE_ID];
+}
+
// Nothing below is called during message composition, only at "new/forward/reply/draft" initialization or
// if a compose-ID is given (i.e. when the compose step is opened in a new window/tab).
if (!is_array($_SESSION['compose']))