[mapserver-dev] Thread safety [was: python mapscript and msCleanup issues]
Stephan Meißl
stephan at meissl.name
Tue Jul 3 07:18:25 PDT 2012
Hi all,
after some further investigations we think the issue is the non-thread
safe usage of VSI IO in WCS 1.1 and 2.0. I created an issue on github
[1] and attached a short script to reproduce the problem. As you can see
all files are written to "/vsimem/wcsout" which is never cleaned.
AFAIK MapServer is meant to be thread save, right? What is the
recommended way for the usage of VSI IO? Is there a recommended way to
find out process and thread ids and use them in the directory name? Any
other ideas?
Thanks,
Stephan
[1] https://github.com/mapserver/mapserver/issues/4369
On Tue, 2012-07-03 at 07:25 +0200, Umberto Nicoletti wrote:
>
>
> On Monday, July 2, 2012, Stephan Meißl wrote:
> Hi Umberto,
>
> many thanks for your help. I tried both suggestions but
> without an
> optimal result.
>
> Using msIO_resetHandlers() instead of msCleanup() gives me,
> after using
> a fairly big amount of memory, quite strange results. In fact
> sometimes
> results from previous requests are present in responses. It
> seems, that
> not everything gets cleared. Any suggestion how to investigate
> this?
>
>
> msIO_resetHandlers should probably be invoked after the response has
> been commited, could you take a look at this page:
>
>
> http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode
>
>
> and implement the cleanup hook as described?
>
>
> Using msIO_getStdoutBufferString() seems to work for text
> responses only
> but not for images.
>
> Thanks,
> Stephan
>
>
> On Sun, 2012-07-01 at 12:06 +0200, Umberto Nicoletti wrote:
> > Before we turn on debugging mode let's try a couple of
> simple changes
> > to your script:
> >
> >
> > http://pastebin.ca/2165984
> >
> >
> > I have replaced the call to msCleanup with a call to
> > msIO_resetHandlers which clears all buffers.
> >
> >
> > http://pastebin.ca/2165986
> >
> >
> > same as before but with the buffer accessed as a string
> rather than a
> > byte array (string is not copied inside mapscript, array
> is).
> >
> >
> > Let us now how this goes.
> >
> >
> > Umberto
> >
> > On Thu, Jun 28, 2012 at 8:02 PM, Stephan Meißl
> <stephan at meissl.name>
> > wrote:
> > Thomas, Umberto,
> >
> > we created a simple (at least as simple as possible)
> test
> > case. Here is
> > a basic Python script: http://pastebin.ca/2165345
> which we
> > deployed in
> > Apache using mod_wsgi with this config:
> > http://pastebin.ca/2165346
> >
> > There is also a basic mapfile using the "road" data
> in
> > "msautotets/wxs"
> > http://pastebin.ca/2165329 but I suspect you can use
> whatever
> > mapfile
> > you have at hand.
> >
> > When we issue multiple simultaneous requests e.g.
> using this
> > script
> > http://pastebin.ca/2165348 (note the "&" at the end
> of the
> > curl call)
> > some of the requests result in errors.
> >
> > Either removing the call to msCleanup() or extending
> the
> > Apache config
> > to limit the number of threads to 1
> > (http://pastebin.ca/2165347) seems
> > to resolve the issues but of course with
> limitations.
> >
> > Are we missing anything essential? How should we
> free
> > request/map
> > objects without using msCleanup() in Python?
> >
> > Thanks for any hint,
> > Stephan
> >
> >
> > On Thu, 2012-06-28 at 14:15 +0200, Umberto Nicoletti
> wrote:
> > > Fabian,
> > > if you could put together a test case that I can
> run to
> > reproduce the
> > > problem I will take a look into it.
> > >
> > >
> > > Regards,
> > > Umberto
> > >
> > > On Thu, Jun 28, 2012 at 1:44 PM, thomas bonfort
> > > <thomas.bonfort at gmail.com> wrote:
> > > Fabian,
> > > can you get a backtrace of the segfaults?
> > >
> > > Aside from that, I would personally
> refrain from
> > using threads
> > > with
> > > mapscript and stick to a prefork mpm in
> apache to
> > accomplish
> > > this. It
> > > is also my understanding that calling m
More information about the mapserver-dev
mailing list