* PythonAPI: Fix segfault in GetAvailableMaps
When using CARLA with Python 3.10, I'm getting a segfault in
GetAvailableMaps. The problem disappears when PyList manipulation does
not happen with GIL unlocked, as done in this commit.
The initial part of crash backtrace (from GDB) is below:
Program terminated with signal SIGSEGV, Segmentation fault.
warning: Section `.reg-xstate/49253' in core file too small.
#0 _PyInterpreterState_GET () at ./Include/internal/pycore_pystate.h:117
117 return tstate->interp;
[Current thread is 1 (Thread 0x7fe6fe48f740 (LWP 49253))]
(gdb) bt
#0 _PyInterpreterState_GET () at ./Include/internal/pycore_pystate.h:117
#1 get_list_state () at Objects/listobject.c:26
#2 PyList_New (size=0) at Objects/listobject.c:159
#3 0x00007fe6fdc0dab0 in boost::python::detail::list_base::list_base() () from /nix/store/c95f3nrkz3sflvycihyw1c8q4nk47p4m-boost-1.79.0/lib/libboost_python310.so.1.79.0
#4 0x00007fe6ef9ecfc4 in boost::python::list::list (this=0x7ffd8a8aae28) at include/boost/python/list.hpp:61
#5 GetAvailableMaps (self=...) at source/libcarla/Client.cpp:26
#6 0x00007fe6efb6a8fe in boost::python::detail::invoke<boost::python::to_python_value<boost::python::list const&>, boost::python::list (*)(carla::client::Client const&), boost::python::arg_from_python<carla::client::Client const&> > (rc=..., f=<optimized out>, ac0=...)
at include/boost/python/detail/invoke.hpp:73
#7 boost::python::detail::caller_arity<1u>::impl<boost::python::list (*)(carla::client::Client const&), boost::python::default_call_policies, boost::mpl::vector2<boost::python::list, carla::client::Client const&> >::operator() (args_=<optimized out>, this=<optimized out>)
at include/boost/python/detail/caller.hpp:233
#8 boost::python::objects::caller_py_function_impl<boost::python::detail::caller<boost::python::list (*)(carla::client::Client const&), boost::python::default_call_policies, boost::mpl::vector2<boost::python::list, carla::client::Client const&> > >::operator() (
this=<optimized out>, args=<optimized out>, kw=<optimized out>) at include/boost/python/object/py_function.hpp:38
#9 0x00007fe6fdc1b4dd in boost::python::objects::function::call(_object*, _object*) const () from /nix/store/c95f3nrkz3sflvycihyw1c8q4nk47p4m-boost-1.79.0/lib/libboost_python310.so.1.79.0
#10 0x00007fe6fdc1b6a8 in boost::detail::function::void_function_ref_invoker0<boost::python::objects::(anonymous namespace)::bind_return, void>::invoke(boost::detail::function::function_buffer&) ()
from /nix/store/c95f3nrkz3sflvycihyw1c8q4nk47p4m-boost-1.79.0/lib/libboost_python310.so.1.79.0
...
* PythonAPI: Fix segfault in get_random_location_from_navigation()
When I run generate_traffic.py under Python 3.10, I get a segfault at
line:
loc = world.get_random_location_from_navigation()
The backtrace from gdb looks like this:
#0 0x00007f04552ad7e7 in new_threadstate () from /nix/store/zqj9irpw63pal9r4671p1gjd9jiw5sid-ros-env/lib/libpython3.10.so.1.0
#1 0x00007f04552adaa1 in PyGILState_Ensure () from /nix/store/zqj9irpw63pal9r4671p1gjd9jiw5sid-ros-env/lib/libpython3.10.so.1.0
#2 0x00007f040afd4f32 in std::_Function_handler<void (carla::client::WorldSnapshot), MakeCallback(boost::python::api::object)::{lambda(auto:1)#1}>::_M_invoke(std::_Any_data const&, carla::client::WorldSnapshot&&) ()
from /nix/store/zqj9irpw63pal9r4671p1gjd9jiw5sid-ros-env/lib/python3.10/site-packages/carla/libcarla.cpython-310-x86_64-linux-gnu.so
#3 0x00007f040b1d4ab1 in carla::client::detail::CallbackList<carla::client::WorldSnapshot>::Call(carla::client::WorldSnapshot) const () from /nix/store/zqj9irpw63pal9r4671p1gjd9jiw5sid-ros-env/lib/python3.10/site-packages/carla/libcarla.cpython-310-x86_64-linux-gnu.so
#4 0x00007f040b1d424a in std::_Function_handler<void (carla::Buffer), carla::client::detail::Episode::Listen()::{lambda(auto:1)#1}>::_M_invoke(std::_Any_data const&, carla::Buffer&&) ()
from /nix/store/zqj9irpw63pal9r4671p1gjd9jiw5sid-ros-env/lib/python3.10/site-packages/carla/libcarla.cpython-310-x86_64-linux-gnu.so
#5 0x00007f040b23fc41 in boost::asio::detail::completion_handler<boost::asio::detail::binder0<carla::streaming::detail::tcp::Client::ReadData()::{lambda()#1}::operator()() const::{lambda(boost::system::error_code, unsigned long)#1}::operator()(boost::system::error_code, unsigned long) const::{lambda()#1}>, boost::asio::io_context::basic_executor_type<std::allocator<void>, 0ul> >::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned long) ()
from /nix/store/zqj9irpw63pal9r4671p1gjd9jiw5sid-ros-env/lib/python3.10/site-packages/carla/libcarla.cpython-310-x86_64-linux-gnu.so
#6 0x00007f040b24ae85 in boost::asio::detail::strand_service::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned long) ()
from /nix/store/zqj9irpw63pal9r4671p1gjd9jiw5sid-ros-env/lib/python3.10/site-packages/carla/libcarla.cpython-310-x86_64-linux-gnu.so
#7 0x00007f040b1a94f5 in boost::asio::detail::scheduler::do_run_one(boost::asio::detail::conditionally_enabled_mutex::scoped_lock&, boost::asio::detail::scheduler_thread_info&, boost::system::error_code const&) ()
from /nix/store/zqj9irpw63pal9r4671p1gjd9jiw5sid-ros-env/lib/python3.10/site-packages/carla/libcarla.cpython-310-x86_64-linux-gnu.so
#8 0x00007f040b199351 in boost::asio::detail::scheduler::run(boost::system::error_code&) [clone .isra.0] () from /nix/store/zqj9irpw63pal9r4671p1gjd9jiw5sid-ros-env/lib/python3.10/site-packages/carla/libcarla.cpython-310-x86_64-linux-gnu.so
#9 0x00007f040b1ac1cb in std:🧵:_State_impl<std:🧵:_Invoker<std::tuple<carla::ThreadPool::AsyncRun(unsigned long)::{lambda()#1}> > >::_M_run() ()
from /nix/store/zqj9irpw63pal9r4671p1gjd9jiw5sid-ros-env/lib/python3.10/site-packages/carla/libcarla.cpython-310-x86_64-linux-gnu.so
#10 0x00007f040bce05c3 in execute_native_thread_routine () from /nix/store/2fpmbk0g0ggm9zq89af7phvvvv8dnm7n-gcc-12.3.0-lib/lib/libstdc++.so.6
#11 0x00007f045509fdd4 in start_thread () from /nix/store/1x4ijm9r1a88qk7zcmbbfza324gx1aac-glibc-2.37-8/lib/libc.so.6
#12 0x00007f04551219b0 in clone3 () from /nix/store/1x4ijm9r1a88qk7zcmbbfza324gx1aac-glibc-2.37-8/lib/libc.so.6
It turns out that its caused by releasing GIL for too long. We fix it
by releasing the GIL only for the actual libcarla call and
constructing Python objects with GIL locked.
---------
Co-authored-by: bernat <bernatx@gmail.com>
Not doing this can lead to the Unreal toolchain examining the host system,
which can cause it to attempt to use glibc features newer than the Unreal
target of 2.17 provides (specifically, rpclib can accidentaly pick up the
symbol pthread_cond_clockwait, which is provided by Ubuntu 20.04 glibc 2.31
but *not* by Unreal glibc 2.17, which then causes a missing symbol linker
error when trying to build CARLA. The reason is that libc++ attempts to
detect glibc version in its headers and conditionally uses that symbol.)
* Adding a new function to load a map only if it is different
* Removing commented code
* Updated AddVehicleWheelsAnimation function
* Revert "Updated AddVehicleWheelsAnimation function"
This reverts commit 55405a3de7.
* Small correction: removing blank space
* Changelog.md update
---------
Co-authored-by: Adri Ollero <adriollero@gmail.com>
Co-authored-by: Axel1092 <35765780+Axel1092@users.noreply.github.com>
* Fix a typo in setting the max brake
From self._max_steer to self._max_brake
* Fix example commands in Multi-GPU docs
Only one dash before `-nullrhi` argument
* Correct incoherent structuring of tutorial for adding sensor to CARLA.
* Add contribution to CHANGELOG.md
* Add notes into breakout boxes in sensor create tutorial.
* Update build_linux.md
Change pseudopath to linux format
* Update build_linux.md
The same change 1 line above
* log format correction
---------
Co-authored-by: kykim0 <kykim144@gmail.com>
Co-authored-by: bernatx <bernatx@gmail.com>
Co-authored-by: Paul Erik Frivold <paulerikf@gmail.com>
Co-authored-by: Balázs Kis <balazs_kis35@yahoo.com>
Co-authored-by: matejm42 <116560704+matejm42@users.noreply.github.com>
Co-authored-by: Rajesh Kumar <rajesh.kumar@coxautoinc.com>
* Added way to download files from overpass api
* Save downloaded text to a file
* Changed log type for File manipulation
* Online process files when request is valid
* Correct file format
* Correct file format for UE4 class
* Fix compilation issue due to name change
* Create Widget with OpenFileDialogFunctionality
* Step xodr to map completed
* Generated Static meshes and replace procedural actors
* Created and saved assets during road generation
* Formatted file correctly
* OSM To ODR broguht to UE4
* Full pipeline working on linux
* Added osm2odr support in editor in Windos
* Added Widget to CartaTools
* Fixed Linux compilation error
* Added Carla Game Instance included to avoid compilation error
* Osm Renderer Tool dummy version
* Server creates SVG files when client request it
* SVG creation and rasterization - libraries integration
* Server size working
* Added Simplify to LibCarla, Added timers to measure time generation. Add mesh deformation during road creation.
* Fixed mesh format translations
* Trying to paint bitmap into the UTexture
* Bitmap sent and drawn in widget texture with bugs
* Map bitmap shown on widget
* Concated meshes generated in the same lane to avoid errors during simplification
* Navigation added to widget
* Avoid Simplify to remove border vertices and try to parallel assets creation process
* Road Generation 0.1 version ready
* Removing Engine Association, Formatting CarlaTools Build dependencies
* Change container type of generated procedural mesh componetns to be supported by UPROPERTY
* Fixed indices jumping by two
* Added in separate thread junctions generation
* Started dynamic database creation
* Dynamic database creation temporally removed
* First step of merge. Coords of bottom left corner and top right corner
* Libraries added to build system
* Git ignore for osmrenderer to avoid ThirdParties directory to be tracked
* Lat and Lon coords for corners sent from server to client
* Transformed to local coords meshes' vertices' coords
* Coords format error fixed
* Saving xodr and osm files inside of OpenDrive folder
* Widget fixed
* UI design improved
* WIP Windows build system for osm-world-renderer
* Socket implementation replaced by boost asio framework in osmrenderer
* Added multithreaded simplification of meshes
* Build system adapted to wndows
* Headers fixed to avoid windows specific heraders compilation
* Remove warnings
* Added widget to import building from houdini
* Added origin latitude and longituda to OSM to OpenDRIVE conversion functions. Fixed Houdini importer widgets.
* Add Houdini plugin download to the build system
* Moved houdini blueprint. Houdini plugin now dowloads by default
* Added houdini download for windows
* OpenDriveToMap Now is a UOBject instead of widget
* Added Lane mark generation.
* Roads materials and distance field scale set to 0
* M_PI macro fixed for windows osm-renderer build system
* Added Lane Marking generation
* Fixed compilation issue related with std pair non copyable lane
* Fix bug where different lanes were concating. Fix bug where end of roadmark was creating an artifact
* Lanes Marks material assignation
* Fix compilation issue and reading from not valid memory crash
* Middle Lane mark duplication bug fixed - temp solution
* Added bumps along road
* Adding marchingcubes library and added to create junctions
* Added junctions generations using marching cube and smoothed
* Fixed linux compilation and removed couple warnings
* Using previous algorithim for two road connections
* Code cleanup
* Remove debug state
* Format Files
* Format third parties files
* Spaces removal
* Fix code format
* Removing unnecesary spaces
* One tile with landscape and road cut
* WidgetCreated
* Widget progress
* LevelCreator Update
* Folder for basicParameters in father map
* Father map from template
* Terrain mesh generated from noise and road mask
Road mask not applied
* Assign SubLevel by position
* Changed to static functions
* StrigUpdate
* Added missing UFUNCTIONS
* Trying to move Houdini actors to tiles
* Meshes from Houdini to Tiles
* Number of X and Y tiles exposed
* Modify to new functions
* Modifying code to create a new variable-offset and table to ingest blueprints
* Update assignTile Function
* Updating widget and cpp file to relocate meshes
* Update Widget and create local copy of OpenDriveToMap
* Added planes as landscape
* RoadImported fixed
* Simplification done in UE side
* Update Houdini pipeline
* Fixed osmrenderer compilation for windows
* Generate landscape and set materials
* Generate UVs for lane meshes. Generate Normals and Tangets for lane meshes
* Delete unnecesary files
* Widget updated
* Exposing different variables to BPs
* Update Assets
* Asset path names fixed
* Fixed height for misc objects, set default landscape
* Rotate Light boxes
* Adding OSM Importer plugin
* Fixed normals on sidewalks
* Update adding buildings plugin
* Adding missing BP
* Update
* Fix BP_Instanced
* Update OSMImporter
* Creating BP_BuildingCreator
* LevelCreator Fixed
* Update building asset creation
* If def add for osm renderer
* Building block variation and styles
* Updated values and generation for demo3
* Fix Widget
* Changed unreal FSocket for boost sockets. Fixed road position errors
* Update building creation
* Updated Building Height
* Fixing line colors
* Added Planes in missing stuff
* Update for meshes
* Update deformation, avoid creation of individual buildings and add check for deformation
* Deleted unnecesary files
* Deleted unnecesary files
* Cleaning code
---------
Co-authored-by: aollero <aollero@cvc.uab.cat>
Co-authored-by: aollero <adriollero@gmail.com>
Co-authored-by: Axel <axellopez92@outlook.com>
Co-authored-by: marionzki <mnoriegazamora@gmail.com>
* Added way to download files from overpass api
* Save downloaded text to a file
* Changed log type for File manipulation
* Online process files when request is valid
* Correct file format
* Correct file format for UE4 class
* Fix compilation issue due to name change
* Create Widget with OpenFileDialogFunctionality
* Step xodr to map completed
* Generated Static meshes and replace procedural actors
* Created and saved assets during road generation
* Formatted file correctly
* OSM To ODR broguht to UE4
* Full pipeline working on linux
* Added osm2odr support in editor in Windos
* Added Widget to CartaTools
* Fixed Linux compilation error
* Added Carla Game Instance included to avoid compilation error
* Osm Renderer Tool dummy version
* Server creates SVG files when client request it
* SVG creation and rasterization - libraries integration
* Server size working
* Added Simplify to LibCarla, Added timers to measure time generation. Add mesh deformation during road creation.
* Fixed mesh format translations
* Trying to paint bitmap into the UTexture
* Bitmap sent and drawn in widget texture with bugs
* Map bitmap shown on widget
* Concated meshes generated in the same lane to avoid errors during simplification
* Navigation added to widget
* Avoid Simplify to remove border vertices and try to parallel assets creation process
* Road Generation 0.1 version ready
* Removing Engine Association, Formatting CarlaTools Build dependencies
* Change container type of generated procedural mesh componetns to be supported by UPROPERTY
* Fixed indices jumping by two
* Added in separate thread junctions generation
* Started dynamic database creation
* Dynamic database creation temporally removed
* First step of merge. Coords of bottom left corner and top right corner
* Libraries added to build system
* Git ignore for osmrenderer to avoid ThirdParties directory to be tracked
* Lat and Lon coords for corners sent from server to client
* Transformed to local coords meshes' vertices' coords
* Coords format error fixed
* Saving xodr and osm files inside of OpenDrive folder
* Widget fixed
* UI design improved
* WIP Windows build system for osm-world-renderer
* Socket implementation replaced by boost asio framework in osmrenderer
* Added multithreaded simplification of meshes
* Build system adapted to wndows
* Headers fixed to avoid windows specific heraders compilation
* Remove warnings
* Added widget to import building from houdini
* Added origin latitude and longituda to OSM to OpenDRIVE conversion functions. Fixed Houdini importer widgets.
* Add Houdini plugin download to the build system
* Moved houdini blueprint. Houdini plugin now dowloads by default
* Added houdini download for windows
* OpenDriveToMap Now is a UOBject instead of widget
* Added Lane mark generation.
* Roads materials and distance field scale set to 0
* M_PI macro fixed for windows osm-renderer build system
* Added Lane Marking generation
* Fixed compilation issue related with std pair non copyable lane
* Fix bug where different lanes were concating. Fix bug where end of roadmark was creating an artifact
* Lanes Marks material assignation
* Fix compilation issue and reading from not valid memory crash
* Middle Lane mark duplication bug fixed - temp solution
* Added bumps along road
* Adding marchingcubes library and added to create junctions
* Added junctions generations using marching cube and smoothed
* Fixed linux compilation and removed couple warnings
* Using previous algorithim for two road connections
* Code cleanup
* Remove debug state
* Format Files
* Format third parties files
* Spaces removal
* Fix code format
* Modified workflow for side walks
* Added check for traffic lights and default materials for sidewalks
* Change build osm script hash
* Fix code format
* changed buildosm2odr hash
* Updated has
* Format fix
---------
Co-authored-by: aollero <aollero@cvc.uab.cat>
Co-authored-by: aollero <adriollero@gmail.com>
Co-authored-by: Axel <axellopez92@outlook.com>