Great Lucio, Thanks sounds like a good plan.
- Dane On May 14, 2009, at 6:03 AM, kRAkEn/gORe wrote: > Ok i added a parameter to select how the gdal dataset should be opened > (the parameter is "shared", but could be renamed to something more > intellegible). > > From what i read the GdalOpenShared is available only from version > 1.6.0, so i'm doing a bit of #ifdef around that, to allow the use of > previous version of gdal too. > > Let me know any consideration on the matter... > > Cheers > > Lucio > > > On Thu, May 14, 2009 at 1:14 AM, Dane Springmeyer > <[email protected]> wrote: >> Hey Lucio, >> >> On May 13, 2009, at 3:26 PM, kRAkEn/gORe wrote: >> >>> hi, i thought it was a good thing to favour GdalOpenShared instead >>> of >>> GdalOpen when using the same dataset a lot of times in the same >>> application and used mapnik in a headless server serving multiple >>> maps >>> with the same rasters all along (and tiling). >> >> >> I think I surely is, but perhaps the problem lies in that not until >> gdal 1.6 >> (i think I read something about that) will the behavior be >> predicatable... >> >> or that QGIS opens in non-shared mode and the combination is >> dangerous? >> >> I can predictably get crashes like the below when opening as Shared >> from >> mapnik, but things work fine with the previous code. >> >>> Never had any problems >>> with that. >> >> I bet it is the combo of shared and non-shared access... >> >>> I don't have qgis here but it will be not a problem to >>> install it and test it besides using gdal.input with my changes. >> >> Okay, great. Keep in mind that QGIS requires python 2.5 so mapnik >> will also >> need to be (re) compiled against that for you to try within the >> QGIS python >> console. >> >> Should work fine either way outside of QGIS console. >> >>> I'll >>> do next days to come, and do some more pushing to the plugins, gdal, >>> ogr, oracle and sqlite as i see them quite behind their shape/raster >>> counterpart. >>> >> Great. >> >>> Probably we will need to provide a gdal's datasource parameter to >>> control the kind of function to favour, shared or not shared ? >>> >> >> This was my thought as well! Have the default not be shared, but be >> able to >> turn it on... >> >> And here is the crash... >> >> >> - dane >> >> Thread 0 Crashed: >> 0 gdal.input 0x146eaa4b >> gdal_featureset::next() + >> 347 >> 1 _mapnik.so 0x12381561 >> mapnik::feature_style_processor<mapnik::agg_renderer<mapnik::Image32> >>> ::apply_to_layer(mapnik::Layer const&, >> mapnik::agg_renderer<mapnik::Image32>&, mapnik::projection const&, >> double) + >> 2145 >> 2 _mapnik.so 0x12377e4f >> render2(mapnik::Map >> const&, mapnik::Image32&) + 335 >> 3 _mapnik.so 0x1237e4df >> boost >> ::python >> ::objects::caller_py_function_impl<boost::python::detail::caller<void >> (*)(mapnik::Map const&, mapnik::Image32&), >> boost::python::default_call_policies, boost::mpl::vector3<void, >> mapnik::Map >> const&, mapnik::Image32&> > >::operator()(_object*, _object*) + 191 >> 4 ...python-xgcc40-mt-1_39.dylib 0x12120e74 >> boost::python::objects::function::call(_object*, _object*) const + >> 468 >> 5 ...python-xgcc40-mt-1_39.dylib 0x121226e5 >> boost >> ::detail >> ::function::void_function_ref_invoker0<boost::python::objects:: >> (anonymous >> namespace)::bind_return, >> void>::invoke(boost::detail::function::function_buffer&) + 37 >> 6 ...python-xgcc40-mt-1_39.dylib 0x12129719 >> boost::function0<void>::operator()() const + 41 >> 7 ...python-xgcc40-mt-1_39.dylib 0x12128b0c >> boost::python::detail::exception_handler::operator() >> (boost::function0<void> >> const&) const + 204 >> 8 _mapnik.so 0x123795b4 >> boost >> ::detail::function::function_obj_invoker2<boost::_bi::bind_t<bool, >> boost::python::detail::translate_exception<mapnik::config_error, void >> (*)(mapnik::config_error const&)>, boost::_bi::list3<boost::arg<1>, >> boost::arg<2>, boost::_bi::value<void (*)(mapnik::config_error >> const&)> > >, >> bool, boost::python::detail::exception_handler const&, >> boost::function0<void> >> const&>::invoke(boost::detail::function::function_buffer&, >> boost::python::detail::exception_handler const&, >> boost::function0<void> >> const&) + 36 >> 9 ...python-xgcc40-mt-1_39.dylib 0x12128bdf >> boost::python::handle_exception_impl(boost::function0<void>) + 63 >> 10 ...python-xgcc40-mt-1_39.dylib 0x1211eb62 function_call + 98 >> 11 org.python.python 0x11278505 PyObject_Call + 50 >> 12 org.python.python 0x112e6832 >> PyEval_EvalFrameEx + >> 17904 >> 13 org.python.python 0x112e8173 >> PyEval_EvalCodeEx + 1638 >> 14 org.python.python 0x11292488 >> PyFunction_SetClosure + >> 2667 >> 15 org.python.python 0x11278505 PyObject_Call + 50 >> 16 org.python.python 0x11280e3a PyMethod_New + >> 2457 >> 17 org.python.python 0x11278505 PyObject_Call + 50 >> 18 org.python.python 0x112e182d >> PyEval_CallObjectWithKeywords + 211 >> 19 sip.so 0x1118051f >> sip_api_invoke_slot + 410 >> 20 QtCore.so 0x1138d4ef >> PyQtProxy::invokeSlot(_sipSlotConnection const&, void**) + 117 >> 21 QtCore.so 0x1139adaa >> PyQtProxy::unislot(void**) + 134 >> 22 QtCore.so 0x1139d62e >> PyQtProxy::qt_metacall(QMetaObject::Call, int, void**) + 242 >> 23 QtCore 0x00320420 >> QMetaObject::activate(QObject*, int, int, void**) + 528 >> 24 libqgis_gui.1.0.dylib 0x0069448e >> QgsMapCanvas::renderComplete(QPainter*) + 62 >> 25 libqgis_gui.1.0.dylib 0x0067e593 >> QgsMapCanvas::refresh() + >> 163 >> 26 gui.so 0x11f4b48e >> meth_QgsMapCanvas_refresh >> + 110 >> 27 org.python.python 0x112e651e >> PyEval_EvalFrameEx + >> 17116 >> 28 org.python.python 0x112e6700 >> PyEval_EvalFrameEx + >> 17598 >> 29 org.python.python 0x112e8173 >> PyEval_EvalCodeEx + 1638 >> 30 org.python.python 0x11292488 >> PyFunction_SetClosure + >> 2667 >> 31 org.python.python 0x11278505 PyObject_Call + 50 >> 32 org.python.python 0x11280e3a PyMethod_New + >> 2457 >> 33 org.python.python 0x11278505 PyObject_Call + 50 >> 34 org.python.python 0x112e182d >> PyEval_CallObjectWithKeywords + 211 >> 35 sip.so 0x1118051f >> sip_api_invoke_slot + 410 >> 36 QtCore.so 0x1138d4ef >> PyQtProxy::invokeSlot(_sipSlotConnection const&, void**) + 117 >> 37 QtCore.so 0x1139adaa >> PyQtProxy::unislot(void**) + 134 >> 38 QtCore.so 0x1139d62e >> PyQtProxy::qt_metacall(QMetaObject::Call, int, void**) + 242 >> 39 QtCore 0x00320420 >> QMetaObject::activate(QObject*, int, int, void**) + 528 >> 40 QtGui 0x009c5bb6 >> QAction::activated(int) + >> 70 >> 41 QtGui 0x009c77a8 >> QAction::activate(QAction::ActionEvent) + 184 >> 42 QtGui 0x00e17bb6 >> QToolButton::nextCheckState() + 38 >> 43 QtGui 0x00d476ba >> QAbstractButtonPrivate::click() + 74 >> 44 QtGui 0x00d47940 >> QAbstractButton::mouseReleaseEvent(QMouseEvent*) + 128 >> 45 QtGui 0x00e17afc >> QToolButton::mouseReleaseEvent(QMouseEvent*) + 28 >> 46 QtGui 0x00a14978 >> QWidget::event(QEvent*) + >> 3736 >> 47 QtGui 0x00d48103 >> QAbstractButton::event(QEvent*) + 83 >> 48 QtGui 0x00e17938 >> QToolButton::event(QEvent*) + 24 >> 49 QtGui 0x009ccc1f >> QApplicationPrivate::notify_helper(QObject*, QEvent*) + 191 >> 50 QtGui 0x009ced4d >> QApplication::notify(QObject*, QEvent*) + 1309 >> 51 libqgis_core.1.0.dylib 0x0137aa4c >> QgsApplication::notify(QObject*, QEvent*) + 46 >> 52 QtCore 0x0030ed01 >> QCoreApplication::notifyInternal(QObject*, QEvent*) + 145 >> 53 QtGui 0x00a2571b >> QApplicationPrivate::globalEventProcessor(OpaqueEventHandlerCallRef*, >> OpaqueEventRef*, void*) + 5771 >> 54 com.apple.HIToolbox 0x923e2143 >> DispatchEventToHandlers(EventTargetRec*, OpaqueEventRef*, >> HandlerCallRec*) + >> 1181 >> 55 com.apple.HIToolbox 0x923e157d >> SendEventToEventTargetInternal(OpaqueEventRef*, >> OpaqueEventTargetRef*, >> HandlerCallRec*) + 405 >> 56 com.apple.HIToolbox 0x923fded2 >> SendEventToEventTarget + >> 52 >> 57 com.apple.HIToolbox 0x924100a8 >> ToolboxEventDispatcherHandler(OpaqueEventHandlerCallRef*, >> OpaqueEventRef*, >> void*) + 1208 >> 58 com.apple.HIToolbox 0x923e24fc >> DispatchEventToHandlers(EventTargetRec*, OpaqueEventRef*, >> HandlerCallRec*) + >> 2134 >> 59 com.apple.HIToolbox 0x923e157d >> SendEventToEventTargetInternal(OpaqueEventRef*, >> OpaqueEventTargetRef*, >> HandlerCallRec*) + 405 >> 60 com.apple.HIToolbox 0x923fded2 >> SendEventToEventTarget + >> 52 >> 61 QtGui 0x00a20521 >> qt_mac_send_event(QFlags<QEventLoop::ProcessEventsFlag>, >> OpaqueEventRef*, >> OpaqueWindowPtr*) + 97 >> 62 QtGui 0x00a2eb62 >> QEventDispatcherMac >> ::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + >> 658 >> 63 QtCore 0x0030e2c1 >> QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 65 >> 64 QtCore 0x0030e38d >> QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 157 >> 65 QtCore 0x00312331 >> QCoreApplication::exec() >> + 161 >> 66 org.qgis.qgis 0x0000a09b main + 8177 >> 67 org.qgis.qgis 0x00007936 start + 54 >> >> >> >> >>> Lucio >>> >>> >>> On Wed, May 13, 2009 at 6:16 PM, Dane Springmeyer <[email protected] >>> > >>> wrote: >>>> >>>> Okay, so I just reverted my svn build to r1130 and am >>>> experiencing no >>>> crashing now: >>>> >>>> http://trac.mapnik.org/changeset/1131 >>>> http://trac.mapnik.org/changeset/1132 >>>> >>>> By the look of them, seems like these changes would have helped in >>>> this situation, but something must not quite be working. >>>> >>>> Kunitoki, do you have QGIS? I'll see if I can replication on linux. >>>> >>>> - 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
