Skip to content

Commit 922002a

Browse files
committed
Try #2 at connect amendment fixup
1 parent 0d68aef commit 922002a

File tree

4 files changed

+66
-63
lines changed

4 files changed

+66
-63
lines changed

eventstream_rpc/include/aws/eventstreamrpc/EventStreamClient.h

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ namespace Aws
6161
public:
6262
EventStreamHeader(const EventStreamHeader &lhs) noexcept;
6363
EventStreamHeader(EventStreamHeader &&rhs) noexcept;
64-
EventStreamHeader &operator=(const EventStreamHeader &lhs) noexcept;
6564
explicit EventStreamHeader(
6665
const struct aws_event_stream_header_value_pair &header,
6766
Crt::Allocator *allocator = Crt::g_allocator);
@@ -72,6 +71,8 @@ namespace Aws
7271

7372
~EventStreamHeader() noexcept;
7473

74+
EventStreamHeader &operator=(const EventStreamHeader &lhs) noexcept;
75+
7576
Crt::String GetHeaderName() const noexcept;
7677

7778
bool GetValueAsString(Crt::String &) const noexcept;
@@ -92,12 +93,9 @@ namespace Aws
9293
class AWS_EVENTSTREAMRPC_API MessageAmendment final
9394
{
9495
public:
96+
explicit MessageAmendment(Crt::Allocator *allocator = Crt::g_allocator) noexcept;
9597
MessageAmendment(const MessageAmendment &lhs);
9698
MessageAmendment(MessageAmendment &&rhs) noexcept;
97-
MessageAmendment &operator=(const MessageAmendment &lhs);
98-
MessageAmendment &operator=(MessageAmendment &&rhs) noexcept;
99-
~MessageAmendment() noexcept;
100-
explicit MessageAmendment(Crt::Allocator *allocator = Crt::g_allocator) noexcept;
10199
MessageAmendment(
102100
const Crt::List<EventStreamHeader> &headers,
103101
Crt::Optional<Crt::ByteBuf> &payload,
@@ -112,6 +110,11 @@ namespace Aws
112110
const Crt::ByteBuf &payload,
113111
Crt::Allocator *allocator = Crt::g_allocator) noexcept;
114112

113+
~MessageAmendment() noexcept;
114+
115+
MessageAmendment &operator=(const MessageAmendment &lhs);
116+
MessageAmendment &operator=(MessageAmendment &&rhs) noexcept;
117+
115118
/**
116119
* Add a given header to the end of the header list.
117120
*/
@@ -378,7 +381,7 @@ namespace Aws
378381
{
379382
public:
380383
EventstreamResultVariantType();
381-
explicit EventstreamResultVariantType(Crt::ScopedResource<AbstractShapeBase> &&modeledResult) noexcept;
384+
explicit EventstreamResultVariantType(Crt::ScopedResource<AbstractShapeBase> &&modeledResponse) noexcept;
382385
explicit EventstreamResultVariantType(Crt::ScopedResource<OperationError> &&modeledError) noexcept;
383386
explicit EventstreamResultVariantType(RpcError rpcError) noexcept;
384387
EventstreamResultVariantType(EventstreamResultVariantType &&rhs) noexcept;
@@ -388,7 +391,7 @@ namespace Aws
388391

389392
ResultType GetType() const { return m_type; }
390393

391-
AbstractShapeBase *GetModeledResult() const;
394+
AbstractShapeBase *GetModeledResponse() const;
392395

393396
OperationError *GetModeledError() const;
394397

@@ -397,7 +400,7 @@ namespace Aws
397400
private:
398401
ResultType m_type;
399402

400-
Crt::ScopedResource<AbstractShapeBase> m_modeledResult;
403+
Crt::ScopedResource<AbstractShapeBase> m_modeledResponse;
401404
Crt::ScopedResource<OperationError> m_modeledError;
402405
RpcError m_rpcError;
403406
};

eventstream_rpc/source/EventStreamClient.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,14 +1025,14 @@ namespace Aws
10251025
MessageAmendment connectAmendment(m_connectionConfig.GetConnectAmendment().value());
10261026
amendmentStorage.PrependHeaders(std::move(connectAmendment).GetHeaders());
10271027

1028-
// optional of a C structure is a terrible idea because it doesn't have a move which means
1029-
// a correct-looking move out of the optional does not actually erase the C struct, leading to a
1030-
// double free. For now, work around by copying the buffer and then erasing the source optional
1031-
// by hand.
1032-
amendmentStorage.SetPayload(connectAmendment.GetPayload());
1028+
if (connectAmendment.GetPayload().has_value())
1029+
{
1030+
const auto &payload = connectAmendment.GetPayload().value();
10331031

1034-
Crt::Optional<Crt::ByteBuf> noBuffer;
1035-
connectAmendment.SetPayload(noBuffer);
1032+
Crt::Optional<Crt::ByteBuf> copiedPayload =
1033+
Crt::ByteBufNewCopy(payload.allocator, payload.buffer, payload.len);
1034+
amendmentStorage.SetPayload(copiedPayload);
1035+
}
10361036
}
10371037

10381038
s_fillNativeHeadersArray(amendmentStorage.GetHeaders(), headersArray, m_allocator);
@@ -2392,33 +2392,33 @@ namespace Aws
23922392
}
23932393

23942394
EventstreamResultVariantType::EventstreamResultVariantType()
2395-
: m_type(ResultType::NONE), m_modeledResult(nullptr), m_modeledError(nullptr),
2395+
: m_type(ResultType::NONE), m_modeledResponse(nullptr), m_modeledError(nullptr),
23962396
m_rpcError({EventStreamRpcStatusCode::EVENT_STREAM_RPC_SUCCESS, AWS_ERROR_SUCCESS})
23972397
{
23982398
}
23992399

24002400
EventstreamResultVariantType::EventstreamResultVariantType(
24012401
Crt::ScopedResource<AbstractShapeBase> &&modeledResult) noexcept
2402-
: m_type(ResultType::OPERATION_RESPONSE), m_modeledResult(std::move(modeledResult)),
2402+
: m_type(ResultType::OPERATION_RESPONSE), m_modeledResponse(std::move(modeledResult)),
24032403
m_modeledError(nullptr),
24042404
m_rpcError({EventStreamRpcStatusCode::EVENT_STREAM_RPC_SUCCESS, AWS_ERROR_SUCCESS})
24052405
{
24062406
}
24072407

24082408
EventstreamResultVariantType::EventstreamResultVariantType(
24092409
Crt::ScopedResource<OperationError> &&modeledError) noexcept
2410-
: m_type(ResultType::OPERATION_ERROR), m_modeledResult(nullptr), m_modeledError(std::move(modeledError)),
2410+
: m_type(ResultType::OPERATION_ERROR), m_modeledResponse(nullptr), m_modeledError(std::move(modeledError)),
24112411
m_rpcError({EventStreamRpcStatusCode::EVENT_STREAM_RPC_SUCCESS, AWS_ERROR_SUCCESS})
24122412
{
24132413
}
24142414

24152415
EventstreamResultVariantType::EventstreamResultVariantType(RpcError rpcError) noexcept
2416-
: m_type(ResultType::RPC_ERROR), m_modeledResult(nullptr), m_modeledError(nullptr), m_rpcError(rpcError)
2416+
: m_type(ResultType::RPC_ERROR), m_modeledResponse(nullptr), m_modeledError(nullptr), m_rpcError(rpcError)
24172417
{
24182418
}
24192419

24202420
EventstreamResultVariantType::EventstreamResultVariantType(EventstreamResultVariantType &&rhs) noexcept
2421-
: m_type(rhs.m_type), m_modeledResult(std::move(rhs.m_modeledResult)),
2421+
: m_type(rhs.m_type), m_modeledResponse(std::move(rhs.m_modeledResponse)),
24222422
m_modeledError(std::move(rhs.m_modeledError)), m_rpcError(rhs.m_rpcError)
24232423
{
24242424
}
@@ -2429,17 +2429,17 @@ namespace Aws
24292429
if (this != &rhs)
24302430
{
24312431
m_type = rhs.m_type;
2432-
m_modeledResult = std::move(rhs.m_modeledResult);
2432+
m_modeledResponse = std::move(rhs.m_modeledResponse);
24332433
m_modeledError = std::move(rhs.m_modeledError);
24342434
m_rpcError = rhs.m_rpcError;
24352435
}
24362436

24372437
return *this;
24382438
}
24392439

2440-
AbstractShapeBase *EventstreamResultVariantType::GetModeledResult() const
2440+
AbstractShapeBase *EventstreamResultVariantType::GetModeledResponse() const
24412441
{
2442-
return m_modeledResult.get();
2442+
return m_modeledResponse.get();
24432443
}
24442444

24452445
OperationError *EventstreamResultVariantType::GetModeledError() const

eventstream_rpc/tests/include/awstest/EchoTestRpcModel.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,7 @@ namespace Awstest
686686
GetAllProductsResult(EventstreamResultVariantType &&result) noexcept : m_result(std::move(result)) {}
687687
GetAllProductsResponse *GetOperationResponse() const noexcept
688688
{
689-
return static_cast<GetAllProductsResponse *>(m_result.GetModeledResult());
689+
return static_cast<GetAllProductsResponse *>(m_result.GetModeledResponse());
690690
}
691691

692692
/**
@@ -736,7 +736,7 @@ namespace Awstest
736736
CauseServiceErrorResult(EventstreamResultVariantType &&result) noexcept : m_result(std::move(result)) {}
737737
CauseServiceErrorResponse *GetOperationResponse() const noexcept
738738
{
739-
return static_cast<CauseServiceErrorResponse *>(m_result.GetModeledResult());
739+
return static_cast<CauseServiceErrorResponse *>(m_result.GetModeledResponse());
740740
}
741741

742742
/**
@@ -835,7 +835,7 @@ namespace Awstest
835835
CauseStreamServiceToErrorResult(EventstreamResultVariantType &&result) noexcept : m_result(std::move(result)) {}
836836
EchoStreamingResponse *GetOperationResponse() const noexcept
837837
{
838-
return static_cast<EchoStreamingResponse *>(m_result.GetModeledResult());
838+
return static_cast<EchoStreamingResponse *>(m_result.GetModeledResponse());
839839
}
840840

841841
/**
@@ -937,7 +937,7 @@ namespace Awstest
937937
EchoStreamMessagesResult(EventstreamResultVariantType &&result) noexcept : m_result(std::move(result)) {}
938938
EchoStreamingResponse *GetOperationResponse() const noexcept
939939
{
940-
return static_cast<EchoStreamingResponse *>(m_result.GetModeledResult());
940+
return static_cast<EchoStreamingResponse *>(m_result.GetModeledResponse());
941941
}
942942

943943
/**
@@ -1000,7 +1000,7 @@ namespace Awstest
10001000
EchoMessageResult(EventstreamResultVariantType &&result) noexcept : m_result(std::move(result)) {}
10011001
EchoMessageResponse *GetOperationResponse() const noexcept
10021002
{
1003-
return static_cast<EchoMessageResponse *>(m_result.GetModeledResult());
1003+
return static_cast<EchoMessageResponse *>(m_result.GetModeledResponse());
10041004
}
10051005

10061006
/**
@@ -1050,7 +1050,7 @@ namespace Awstest
10501050
GetAllCustomersResult(EventstreamResultVariantType &&result) noexcept : m_result(std::move(result)) {}
10511051
GetAllCustomersResponse *GetOperationResponse() const noexcept
10521052
{
1053-
return static_cast<GetAllCustomersResponse *>(m_result.GetModeledResult());
1053+
return static_cast<GetAllCustomersResponse *>(m_result.GetModeledResponse());
10541054
}
10551055

10561056
/**

0 commit comments

Comments
 (0)