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

Reply via email to