Hello all,
I have a prototype program (on Debian/Linux/Sid x86-64, clang 3.5 or gcc 4.9 compiler in C++11 mode) which has the following function:
void ya_web_service(int port)
{
//DEBUG_OUT("ya_web_service start port=" << port);
Onion::Onion onionserver(O_THREADED);
onionserver.setPort(port);
Onion::Url onionrooturl(&onionserver);
Onion::ExportLocal onionlocalwebdir("webdir");
onionrooturl.add("^webdir/", onionlocalwebdir);
std::cout << "Ya web service on port " << port << std::endl;
onionserver.listen();
//DEBUG_OUT("ya_web_service end port=" << port);
}When I run my program without calling
ya_web_service (directly in the middle of main) in a directory having a non-empty
webdir/ subdirectory, valgrind is happn (does not detect any leaks in my program not calling
ya_web_service).
When I run the same program by passing it
-W 8080 as program argument, the only difference is that ya_web_service gets directly called in the middle of my
main. Without valgrind, I'm getting
Running the webservice on localhost port 8080 .
[A8C15740] [2015-03-18 10:38:00] [DEBUG onion.c:195] Ignoring SIGPIPE
[A8C15740] [2015-03-18 10:38:00] [DEBUG poller.c:202] Init thread stuff for poll. Eventfd at 5
[A8C15740] [2015-03-18 10:38:00] [DEBUG onion.c:626] add 0xac0cf0 listen_point (0xaaa020, 0xac0cf0, (nil))
[A8C15740] [2015-03-18 10:38:00] [DEBUG onion.c:713] New root url handler
*** Error in `./yacax': double free or corruption (!prev): 0x0000000000abb6d0 ***
and with valgrind I am getting a more precise error:
Running the webservice on localhost port 8080 .
[4063D80] [2015-03-18 10:40:27] [DEBUG onion.c:195] Ignoring SIGPIPE
[4063D80] [2015-03-18 10:40:27] [DEBUG poller.c:202] Init thread stuff for poll. Eventfd at 5
[4063D80] [2015-03-18 10:40:27] [DEBUG onion.c:626] add 0xada70a0 listen_point (0xada71a0, 0xada70a0, (nil))
[4063D80] [2015-03-18 10:40:27] [DEBUG onion.c:713] New root url handler
==5719== Invalid read of size 8
==5719== at 0x5054AB4: onion_handler_free (handler.c:115)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A24F: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84a8 is 8 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
==5719== Invalid read of size 8
==5719== at 0x5054AC1: onion_handler_free (handler.c:115)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A24F: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84b0 is 16 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
==5719== Invalid read of size 8
==5719== at 0x5054ACE: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A24F: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84a8 is 8 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
==5719== Invalid read of size 8
==5719== at 0x5054AD6: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A24F: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84b0 is 16 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
==5719== Invalid read of size 8
==5719== at 0x505CC8A: onion_handler_export_local_delete (exportlocal.c:215)
==5719== by 0x5054ADE: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A24F: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada8450 is 16 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x505CCA1: onion_handler_export_local_delete (exportlocal.c:216)
==5719== by 0x5054ADE: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719==
==5719== Invalid free() / delete / delete[] / realloc()
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x505CC95: onion_handler_export_local_delete (exportlocal.c:215)
==5719== by 0x5054ADE: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A24F: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada7400 is 0 bytes inside a block of size 4,096 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x505CC95: onion_handler_export_local_delete (exportlocal.c:215)
==5719== by 0x5054ADE: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719==
==5719== Invalid free() / delete / delete[] / realloc()
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x505CCA1: onion_handler_export_local_delete (exportlocal.c:216)
==5719== by 0x5054ADE: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A24F: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada8440 is 0 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x505CCA1: onion_handler_export_local_delete (exportlocal.c:216)
==5719== by 0x5054ADE: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719==
==5719== Invalid read of size 8
==5719== at 0x5054AE3: onion_handler_free (handler.c:118)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A24F: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84b8 is 24 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
==5719== Invalid free() / delete / delete[] / realloc()
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A24F: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84a0 is 0 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
==5719== Invalid read of size 8
==5719== at 0x5054AB4: onion_handler_free (handler.c:115)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x47A25B: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84a8 is 8 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
==5719== Invalid read of size 8
==5719== at 0x5054AC1: onion_handler_free (handler.c:115)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x47A25B: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84b0 is 16 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
==5719== Invalid read of size 8
==5719== at 0x5054ACE: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x47A25B: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84a8 is 8 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
==5719== Invalid read of size 8
==5719== at 0x5054AD6: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x47A25B: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84b0 is 16 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
==5719== Invalid read of size 8
==5719== at 0x505CC8A: onion_handler_export_local_delete (exportlocal.c:215)
==5719== by 0x5054ADE: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x47A25B: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada8450 is 16 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x505CCA1: onion_handler_export_local_delete (exportlocal.c:216)
==5719== by 0x5054ADE: onion_handler_free (handler.c:116)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719==
==5719== Invalid read of size 8
==5719== at 0x5054AE3: onion_handler_free (handler.c:118)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x47A25B: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719== Address 0xada84b8 is 24 bytes inside a block of size 32 free'd
==5719== at 0x4C29E90: free (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5719== by 0x5051BF6: onion_low_free (low.c:226)
==5719== by 0x5054AF6: onion_handler_free (handler.c:119)
==5719== by 0x4E406F1: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:56)
==5719== by 0x4E4072D: Onion::ExportLocal::~ExportLocal() (shortcuts.cpp:57)
==5719== by 0x47A9B4: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_destroy(std::_Any_data&, std::integral_constant<bool, false>) (functional:1894)
==5719== by 0x47A872: std::_Function_base::_Base_manager<Onion::ExportLocal>::_M_manager(std::_Any_data&, std::_Any_data const&, std::_Manager_operation) (functional:1918)
==5719== by 0x475286: std::_Function_base::~_Function_base() (functional:1998)
==5719== by 0x47A6A4: std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>::~function() (functional:1834)
==5719== by 0x47A528: Onion::Url::add(std::string const&, std::function<onion_connection_status_e (Onion::Request&, Onion::Response&)>) (url.hpp:119)
==5719== by 0x47A23A: ya_web_service(int) (ywebx.cc:15)
==5719== by 0x497B4B: main (ymainx.cc:159)
==5719==
Ya web service on port 8080
[4063D80] [2015-03-18 10:40:27] [DEBUG listen_point.c:186] Trying to listen at (null):8080
[4063D80] [2015-03-18 10:40:27] [DEBUG listen_point.c:227] Listening to 0.0.0.0:8080, fd 6
[4063D80] [2015-03-18 10:40:27] [DEBUG onion.c:484] Adding listen point fd 6 to poller
[4063D80] [2015-03-18 10:40:27] [DEBUG onion.c:492] Start polling / listening 0xada71a0, 0xada70a0, (nil)
[C92B700] [2015-03-18 10:40:27] [DEBUG poller.c:356] Start polling
[C12A700] [2015-03-18 10:40:27] [DEBUG poller.c:356] Start polling
[B929700] [2015-03-18 10:40:27] [DEBUG poller.c:356] Start polling
[D92D700] [2015-03-18 10:40:27] [DEBUG poller.c:356] Start polling
[E92F700] [2015-03-18 10:40:27] [DEBUG poller.c:356] Start polling
[D12C700] [2015-03-18 10:40:27] [DEBUG poller.c:356] Start polling
[E12E700] [2015-03-18 10:40:27] [DEBUG poller.c:356] Start polling
[4063D80] [2015-03-18 10:40:27] [DEBUG poller.c:356] Start pollingSome more details: my
main does not use any Onion thing except (where
int webport; is some local
main variable previously initialized by command line parsing with
getopt_long...) in a middle block which contains
if (webport>0)
{
std::cout << "Running the webservice on localhost port "
<< webport << " ." << std::endl;
ya_web_service(webport);
std::cout << std::endl << "Done webservice." << std::endl;
}I just recompiled and reinstalled the libonion from David Moreno's github:
git log | head says
commit 25d4a2ad8cb6bd4e193ba69589fe7ad8674c2f57
Merge: 5c97f90 2987064
Author: David Moreno Montero <dmo...@coralbits.com>
Date: Mon Jan 26 15:21:56 2015 +0100
Merge pull request #102 from bstarynk/master
more systematic testing of listen point reader & writer to avoid core dump
commit 2987064881e773a9637b351a28baf8923763eb78
I believe I am incorrectly understanding how to use onion with C++11 (or C++14) or have found a bug in libonion C++ ; any clues?
Regards.
--
Basile Starynkevitch (France)
http://starynkevitch.net/Basile/