Hi Dane,

You're right, this most likely to do with how mapped files are created
on diff platforms. I wonder if we should compile shape.input without
memory mapped files on windows. I think, on win32 all std::fstream's
implemented as memory mapped files anyway.  We'll need to check this,
though.

 Artem

2009/5/12 Dane Springmeyer <[email protected]>:
> I've confirmed that QGIS's OGR driver opens with both FILE_SHARE_READ and
> FILE_SHARE_WRITE and show allow more than one process to open the file for
> update access at once (thanks to Frank Warmerdam).
> So, I figure that something about the way that Mapnik's use of boost is
> creating the need for exclusive access to the file on windows. If figure
> this must have to do with our implementation of memory mapped read access to
> the shapefiles.
> The boost docs indicate that a 'mapped_file_source' should be opened for
> read-only access:
> http://www.boost.org/doc/libs/1_38_0/libs/iostreams/doc/classes/mapped_file.html#mapped_file_source
> Does this really require exclusive access?
> Looking into:
> http://www.boost.org/doc/libs/1_39_0/boost/iostreams/device/mapped_file.hpp
> seems to indicate that on Windows (depending on compiler version) things may
> actually be opened in 'app' (append) mode:
>
>     #if BOOST_WORKAROUND(BOOST_MSVC, < 1400) && defined(BOOST_RWSTD_VER) ||
> \
>         defined(__BORLANDC__) && defined(_CPPLIB_VER)
>         /**/
>         : mode(std::ios_base::openmode(0)),
>
> So, some leads but I'm not sure where to go from here.
> Anyone have thoughts?
> Dane
>
> On May 11, 2009, at 10:47 PM, Dane Springmeyer wrote:
>
> So I'm trying to debug a strange thing on windows where a shapefile
> opened in another application cannot be opened by Mapnik.
>
> I say strange because the problem does not occur on mac and linux -
> only on windows. But it does make logical sense that opening the same
> file in two running Python processes may create problems.
>
> Essentially, I've written a Python plugin to QGIS that loops through
> all active datasources open in QGIS, builds up a Mapnik map, and
> allows export to XML or rendering in the QGIS canvas.
>
> It works great on mac and linux, but on Windows I get an error like:
>
> shp = Shapefile(file='c:/temp_files/world_borders.shp')
>
>  got exception ...
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "C:\mapnik_0_6_0\site-packages\mapnik\__init__.py", line 132,
> in Shapefile
>     return CreateDatasource(keywords)
> RuntimeError: failed opening file: The handle is invalid.
>
> QGIS uses the OGR C++ api to open the shapefile in read/write mode. I
> assume that the mapnik shapefile input opens read-only.
>
> Anyone have any ideas of potential workarounds?
>
> - Dane
> _______________________________________________
> Mapnik-devel mailing list
> [email protected]
> https://lists.berlios.de/mailman/listinfo/mapnik-devel
>
>
> _______________________________________________
> Mapnik-devel mailing list
> [email protected]
> https://lists.berlios.de/mailman/listinfo/mapnik-devel
>
>
_______________________________________________
Mapnik-devel mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/mapnik-devel

Reply via email to