Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit73d4024

Browse files
HighCommander4deanberris
authored andcommitted
Do not wrap exceptions passed to boost::promise::set_exception in std::exception_ptr (fixes#815)
boost::promise only knows about boost::exception_ptr, and handleswrapping of concrete exception types into that itself. If passedstd::exception_ptr, it will wrap it a second time and later throwthe std::exception_ptr itself.
1 parentcf240bf commit73d4024

File tree

3 files changed

+37
-38
lines changed

3 files changed

+37
-38
lines changed

‎boost/network/protocol/http/client/connection/async_normal.hpp

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,13 @@ struct http_async_connection
123123
private:
124124
voidset_errors(boost::system::error_codeconst& ec, body_callback_function_type callback) {
125125
boost::system::system_errorerror(ec);
126-
this->version_promise.set_exception(std::make_exception_ptr(error));
127-
this->status_promise.set_exception(std::make_exception_ptr(error));
128-
this->status_message_promise.set_exception(std::make_exception_ptr(error));
129-
this->headers_promise.set_exception(std::make_exception_ptr(error));
130-
this->source_promise.set_exception(std::make_exception_ptr(error));
131-
this->destination_promise.set_exception(std::make_exception_ptr(error));
132-
this->body_promise.set_exception(std::make_exception_ptr(error));
126+
this->version_promise.set_exception(error);
127+
this->status_promise.set_exception(error);
128+
this->status_message_promise.set_exception(error);
129+
this->headers_promise.set_exception(error);
130+
this->source_promise.set_exception(error);
131+
this->destination_promise.set_exception(error);
132+
this->body_promise.set_exception(error);
133133
if ( callback )
134134
callback(char_const_range(), ec );
135135
this->timer_.cancel();
@@ -456,28 +456,27 @@ struct http_async_connection
456456
}else {
457457
boost::system::error_code report_code = is_timedout_ ? boost::asio::error::timed_out : ec;
458458
boost::system::system_errorerror(report_code);
459-
this->source_promise.set_exception(std::make_exception_ptr(error));
460-
this->destination_promise.set_exception(std::make_exception_ptr(error));
459+
this->source_promise.set_exception(error);
460+
this->destination_promise.set_exception(error);
461461
switch (state) {
462462
case version:
463-
this->version_promise.set_exception(std::make_exception_ptr(error));
463+
this->version_promise.set_exception(error);
464464
// fall-through
465465
case status:
466-
this->status_promise.set_exception(std::make_exception_ptr(error));
466+
this->status_promise.set_exception(error);
467467
// fall-through
468468
case status_message:
469-
this->status_message_promise.set_exception(
470-
std::make_exception_ptr(error));
469+
this->status_message_promise.set_exception(error);
471470
// fall-through
472471
case headers:
473-
this->headers_promise.set_exception(std::make_exception_ptr(error));
472+
this->headers_promise.set_exception(error);
474473
// fall-through
475474
case body:
476475
if (!callback) {
477476
// N.B. if callback is non-null, then body_promise has already been
478477
// set to value "" to indicate body is handled by streaming handler
479478
// so no exception should be set
480-
this->body_promise.set_exception(std::make_exception_ptr(error));
479+
this->body_promise.set_exception(error);
481480
}
482481
else
483482
callback(char_const_range(), report_code );

‎boost/network/protocol/http/client/connection/async_protocol_handler.hpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,13 @@ struct http_async_protocol_handler {
128128
<<"\"");
129129
#endif
130130
std::runtime_errorerror("Invalid Version Part.");
131-
version_promise.set_exception(std::make_exception_ptr(error));
132-
status_promise.set_exception(std::make_exception_ptr(error));
133-
status_message_promise.set_exception(std::make_exception_ptr(error));
134-
headers_promise.set_exception(std::make_exception_ptr(error));
135-
source_promise.set_exception(std::make_exception_ptr(error));
136-
destination_promise.set_exception(std::make_exception_ptr(error));
137-
body_promise.set_exception(std::make_exception_ptr(error));
131+
version_promise.set_exception(error);
132+
status_promise.set_exception(error);
133+
status_message_promise.set_exception(error);
134+
headers_promise.set_exception(error);
135+
source_promise.set_exception(error);
136+
destination_promise.set_exception(error);
137+
body_promise.set_exception(error);
138138
}else {
139139
partial_parsed.append(std::begin(result_range),
140140
std::end(result_range));
@@ -175,12 +175,12 @@ struct http_async_protocol_handler {
175175
<<"\"");
176176
#endif
177177
std::runtime_errorerror("Invalid status part.");
178-
status_promise.set_exception(std::make_exception_ptr(error));
179-
status_message_promise.set_exception(std::make_exception_ptr(error));
180-
headers_promise.set_exception(std::make_exception_ptr(error));
181-
source_promise.set_exception(std::make_exception_ptr(error));
182-
destination_promise.set_exception(std::make_exception_ptr(error));
183-
body_promise.set_exception(std::make_exception_ptr(error));
178+
status_promise.set_exception(error);
179+
status_message_promise.set_exception(error);
180+
headers_promise.set_exception(error);
181+
source_promise.set_exception(error);
182+
destination_promise.set_exception(error);
183+
body_promise.set_exception(error);
184184
}else {
185185
partial_parsed.append(std::begin(result_range),
186186
std::end(result_range));
@@ -221,11 +221,11 @@ struct http_async_protocol_handler {
221221
<<"\"");
222222
#endif
223223
std::runtime_errorerror("Invalid status message part.");
224-
status_message_promise.set_exception(std::make_exception_ptr(error));
225-
headers_promise.set_exception(std::make_exception_ptr(error));
226-
source_promise.set_exception(std::make_exception_ptr(error));
227-
destination_promise.set_exception(std::make_exception_ptr(error));
228-
body_promise.set_exception(std::make_exception_ptr(error));
224+
status_message_promise.set_exception(error);
225+
headers_promise.set_exception(error);
226+
source_promise.set_exception(error);
227+
destination_promise.set_exception(error);
228+
body_promise.set_exception(error);
229229
}else {
230230
partial_parsed.append(std::begin(result_range),
231231
std::end(result_range));
@@ -323,10 +323,10 @@ struct http_async_protocol_handler {
323323
<<boost::distance(result_range));
324324
#endif
325325
std::runtime_errorerror("Invalid header part.");
326-
headers_promise.set_exception(std::make_exception_ptr(error));
327-
body_promise.set_exception(std::make_exception_ptr(error));
328-
source_promise.set_exception(std::make_exception_ptr(error));
329-
destination_promise.set_exception(std::make_exception_ptr(error));
326+
headers_promise.set_exception(error);
327+
body_promise.set_exception(error);
328+
source_promise.set_exception(error);
329+
destination_promise.set_exception(error);
330330
}else {
331331
partial_parsed.append(std::begin(result_range),
332332
std::end(result_range));

‎libs/network/test/http/client_get_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ TYPED_TEST(HTTPClientTest, GetRequestSNI) {
5555
// trying without setting sni_hostname
5656
ASSERT_NO_THROW(response =client().get(request));
5757
// raise "tlsv1 alert internal error"
58-
ASSERT_THROW(response.status(),std::exception_ptr);
58+
ASSERT_THROW(response.status(),boost::system::system_error);
5959

6060
// setting sni_hostname
6161
request.sni_hostname(request.host());

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp