From 81f5dd7774119e6f35f4594a68b25e53a22e65f2 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Wed, 09 Nov 2011 08:40:23 -0500 Subject: [PATCH] Consider replication delays in session storage --- program/steps/mail/compose.inc | 8 ++++++++ program/include/rcube_session.php | 12 ++++++++++++ 2 files changed, 20 insertions(+), 0 deletions(-) diff --git a/program/include/rcube_session.php b/program/include/rcube_session.php index e8bd9d0..22aa550 100644 --- a/program/include/rcube_session.php +++ b/program/include/rcube_session.php @@ -394,6 +394,18 @@ /** + * 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 6961bf8..c527ce1 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -31,6 +31,14 @@ $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'])) -- Gitblit v1.9.1