Commit ee285609 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

Fixed #8311 -- Avoid an infinite loop with session key generation when using

the cache backend and memcached goes away (or is not running).


git-svn-id: http://code.djangoproject.com/svn/django/trunk@8620 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent b80db03c
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -17,7 +17,12 @@ class SessionStore(SessionBase):
        return {}

    def create(self):
        while True:
        # Because a cache can fail silently (e.g. memcache), we don't know if
        # we are failing to create a new session because of a key collision or
        # because the cache is missing. So we try for a (large) number of times
        # and then raise an exception. That's the risk you shoulder if using
        # cache backing.
        for i in xrange(10000):
            self.session_key = self._get_new_session_key()
            try:
                self.save(must_create=True)
@@ -25,6 +30,7 @@ class SessionStore(SessionBase):
                continue
            self.modified = True
            return
        raise RuntimeError("Unable to create a new session key.")

    def save(self, must_create=False):
        if must_create: