Comments (3)
I ran a quick test. This also happens with the oatpp websocket example app:
(gdb) where
#0 0x00005555556ceb22 in std::_Hashtable<oatpp::data::share::StringKeyLabelCI_FAST, std::pair<oatpp::data::share::StringKeyLabelCI_FAST const, oatpp::data::share::StringKeyLabel>, std::allocator<std::pair<oatpp::data::share::StringKeyLabelCI_FAST const, oatpp::data::share::StringKeyLabel> >, std::__detail::_Select1st, std::equal_to<oatpp::data::share::StringKeyLabelCI_FAST>, std::hash<oatpp::data::share::StringKeyLabelCI_FAST>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::_M_bucket_index(oatpp::data::share::StringKeyLabelCI_FAST const&, unsigned long) const ()
#1 0x0000555555706803 in std::_Hashtable<oatpp::data::share::StringKeyLabelCI_FAST, std::pair<oatpp::data::share::StringKeyLabelCI_FAST const, oatpp::data::share::StringKeyLabel>, std::allocator<std::pair<oatpp::data::share::StringKeyLabelCI_FAST const, oatpp::data::share::StringKeyLabel> >, std::__detail::_Select1st, std::equal_to<oatpp::data::share::StringKeyLabelCI_FAST>, std::hash<oatpp::data::share::StringKeyLabelCI_FAST>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::find(oatpp::data::share::StringKeyLabelCI_FAST const&) ()
#2 0x000055555570652b in std::unordered_map<oatpp::data::share::StringKeyLabelCI_FAST, oatpp::data::share::StringKeyLabel, std::hash<oatpp::data::share::StringKeyLabelCI_FAST>, std::equal_to<oatpp::data::share::StringKeyLabelCI_FAST>, std::allocator<std::pair<oatpp::data::share::StringKeyLabelCI_FAST const, oatpp::data::share::StringKeyLabel> > >::find(oatpp::data::share::StringKeyLabelCI_FAST const&) ()
#3 0x0000555555704b7b in oatpp::web::protocol::http::outgoing::Response::putHeaderIfNotExists(oatpp::data::share::StringKeyLabelCI_FAST const&, oatpp::data::share::StringKeyLabel const&) ()
#4 0x000055555570f39f in oatpp::web::server::HttpProcessor::processRequest(oatpp::web::server::HttpRouter*, std::shared_ptr<oatpp::data::stream::IOStream> const&, std::shared_ptr<oatpp::web::protocol::http::incoming::BodyDecoder const> const&, std::shared_ptr<oatpp::web::server::handler::ErrorHandler> const&, oatpp::collection::LinkedList<std::shared_ptr<oatpp::web::server::handler::RequestInterceptor> >*, void*, int, std::shared_ptr<oatpp::data::stream::InputStreamBufferedProxy> const&, int&) ()
#5 0x0000555555707e0d in oatpp::web::server::HttpConnectionHandler::Task::run() ()
#6 0x000055555570a41b in void std::__invoke_impl<void, void (oatpp::web::server::HttpConnectionHandler::Task::*)(), oatpp::web::server::HttpConnectionHandler::Task>(std::__invoke_memfun_ref, void (oatpp::web::server::HttpConnectionHandler::Task::*&&)(), oatpp::web::server::HttpConnectionHandler::Task&&) ()
#7 0x00005555557094cd in std::__invoke_result<void (oatpp::web::server::HttpConnectionHandler::Task::*)(), oatpp::web::server::HttpConnectionHandler::Task>::type std::__invoke<void (oatpp::web::server::HttpConnectionHandler::Task::*)(), oatpp::web::server::HttpConnectionHandler::Task>(void (oatpp::web::server::HttpConnectionHandler::Task::*&&)(), oatpp::web::server::HttpConnectionHandler::Task&&) ()
#8 0x000055555570ed53 in decltype (__invoke((_S_declval<0ul>)(), (_S_declval<1ul>)())) std::thread::_Invoker<std::tuple<void (oatpp::web::server::HttpConnectionHandler::Task::*)(), oatpp::web::server::HttpConnectionHandler::Task> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) ()
#9 0x000055555570eb34 in std::thread::_Invoker<std::tuple<void (oatpp::web::server::HttpConnectionHandler::Task::*)(), oatpp::web::server::HttpConnectionHandler::Task> >::operator()() ()
#10 0x000055555570e970 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (oatpp::web::server::HttpConnectionHandler::Task::*)(), oatpp::web::server::HttpConnectionHandler::Task> > >::_M_run() ()
#11 0x00007ffff78ea57f in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#12 0x00007ffff7bbd6db in start_thread (arg=0x7ffff6e85700) at pthread_create.c:463
#13 0x00007ffff734588f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
from oatpp.
Hey @c-lgrant
Thanks, for the bug report!
I have it reproduced.
Fixing it...
Regards,
Leonid
from oatpp.
Hey @c-lgrant ,
It is fixed now. Please update both oatpp
and oatpp-module
.
The problem was that Firefox was sending "Connection: keep-alive, Upgrade"
header value set.
And oatpp::websocket::Handshaker
was expecting just Connection: Upgrade"
thus returned nullptr.
I've added support for Handshaker to parse value-sets plus changed return nullptr
to throw HttpError
Thanks again for the bug report.
Best Regards,
Leonid
from oatpp.
Related Issues (20)
- About MySQL
- BODY_DTO fails to correctly parse "false" for Boolean HOT 1
- Sending "null" in request body causes seg-fault on any endpoint w/ BODY_DTO
- Can files be read asynchronously in ENDPOINT_ASYNC? HOT 1
- Regarding oatpp::async::CoroutineWithResult HOT 9
- How to add default values to the QUERY parameters of an ENDPOINT?
- Enhance Deserializer's "Error. Unknown field"
- How can I use OATPP to handle web browser request download file. HOT 2
- Memory leak in Object mapping HOT 1
- Deserialize json when not include required field only gives error when the field is specified as null
- [Question] readBodyIntoDTO when there's a list in the body
- API question
- how to make dynamic sql use oatpp-sqlite HOT 1
- LazyStringMapTemplate::get returns Nullptr wich is not in oatpp.io Documentation
- Please add support for CMake 3.16
- Cannot test if required integer query parameter is empty
- [Question] Is it possible during compilation to write out the generated oas-3.0.0.json file?
- May memory leak
- How should I make my process send requests to the target when using OATPP HOT 4
- Stack corruption issue in ConnectionProvider.cpp
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from oatpp.