This is a strange behavior of open. Which linux version? Anyway, I
will test your solution, it seems the right one.

Massimo

On Mar 11, 3:30 am, Corne <i...@cobra-scripters.nl> wrote:
> Hello,
>
> We were running into the following:
>
> (os: Linux - Apache with mod_wsgi)
>
> We have client code which does a number of requests:
> what happened is that some of these requests got 401-not authorized as
> response.
>
> The problem is that in globals.py the session file is opened (rb+) and
> the file is locked.
> The second request (which is handled at the same time from a different
> process) tries to do the same; but the file is still locked at that
> time.
> Expected result would be that we have to wait for the lock to free,
> but instead open throws an exception.
>
> As solution we now first open the file for reading, than acquire the
> lock; and finally open the file for reading/appending (rb+)
>
> Opening the file for reading will succeed, than the lock is acquired
> (or we wait until we can get the lock). When we have the lock there is
> no problem opening the file for reading and writing anymore..
>
> Patch:
> --- globals.py  2011-03-11 10:13:22.634740461 +0100
> +++ globals.py_new      2011-03-10 15:43:55.000000000 +0100
> @@ -270,9 +270,11 @@
>              if response.session_id:
>                  try:
>                      response.session_file = \
> -                        open(response.session_filename, 'rb+')
> +                        open(response.session_filename, 'r')
>                      portalocker.lock(response.session_file,
>                              portalocker.LOCK_EX)
> +                    response.session_file = \
> +                        open(response.session_filename, 'rb+')
>                      self.update(cPickle.load(response.session_file))
>                      response.session_file.seek(0)
>                      oc = response.session_filename.split('/')
> [-1].split('-')[0]

Reply via email to