Skip to content

Commit edc0c4f

Browse files
committed
client: store sync for request encoders separately
Each connection has an underying request encoder, and currently all encoders share the same `sync` field (it is marked as `static`). It breaks multithreaded scenarios because connections can be used concurrently from several threads. The commit makes the field non-static. Part of #110
1 parent d713a98 commit edc0c4f

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

src/Client/Connection.hpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ Connection<BUFFER, NetProvider>::execute(const std::string& statement, const T&
612612
{
613613
impl->enc.encodeExecute(statement, parameters);
614614
impl->connector.readyToSend(*this);
615-
return RequestEncoder<BUFFER>::getSync();
615+
return impl->enc.getSync();
616616
}
617617

618618
template<class BUFFER, class NetProvider>
@@ -622,7 +622,7 @@ Connection<BUFFER, NetProvider>::execute(unsigned int stmt_id, const T& paramete
622622
{
623623
impl->enc.encodeExecute(stmt_id, parameters);
624624
impl->connector.readyToSend(*this);
625-
return RequestEncoder<BUFFER>::getSync();
625+
return impl->enc.getSync();
626626
}
627627

628628
template<class BUFFER, class NetProvider>
@@ -631,7 +631,7 @@ Connection<BUFFER, NetProvider>::prepare(const std::string& statement)
631631
{
632632
impl->enc.encodePrepare(statement);
633633
impl->connector.readyToSend(*this);
634-
return RequestEncoder<BUFFER>::getSync();
634+
return impl->enc.getSync();
635635
}
636636

637637
template<class BUFFER, class NetProvider>
@@ -641,7 +641,7 @@ Connection<BUFFER, NetProvider>::call(const std::string &func, const T &args)
641641
{
642642
impl->enc.encodeCall(func, args);
643643
impl->connector.readyToSend(*this);
644-
return RequestEncoder<BUFFER>::getSync();
644+
return impl->enc.getSync();
645645
}
646646

647647
template<class BUFFER, class NetProvider>
@@ -650,7 +650,7 @@ Connection<BUFFER, NetProvider>::ping()
650650
{
651651
impl->enc.encodePing();
652652
impl->connector.readyToSend(*this);
653-
return RequestEncoder<BUFFER>::getSync();
653+
return impl->enc.getSync();
654654
}
655655

656656
template<class BUFFER, class NetProvider>
@@ -660,7 +660,7 @@ Connection<BUFFER, NetProvider>::insert(const T &tuple, uint32_t space_id)
660660
{
661661
impl->enc.encodeInsert(tuple, space_id);
662662
impl->connector.readyToSend(*this);
663-
return RequestEncoder<BUFFER>::getSync();
663+
return impl->enc.getSync();
664664
}
665665

666666
template<class BUFFER, class NetProvider>
@@ -670,7 +670,7 @@ Connection<BUFFER, NetProvider>::replace(const T &tuple, uint32_t space_id)
670670
{
671671
impl->enc.encodeReplace(tuple, space_id);
672672
impl->connector.readyToSend(*this);
673-
return RequestEncoder<BUFFER>::getSync();
673+
return impl->enc.getSync();
674674
}
675675

676676
template<class BUFFER, class NetProvider>
@@ -681,7 +681,7 @@ Connection<BUFFER, NetProvider>::delete_(const T &key, uint32_t space_id,
681681
{
682682
impl->enc.encodeDelete(key, space_id, index_id);
683683
impl->connector.readyToSend(*this);
684-
return RequestEncoder<BUFFER>::getSync();
684+
return impl->enc.getSync();
685685
}
686686

687687
template<class BUFFER, class NetProvider>
@@ -692,7 +692,7 @@ Connection<BUFFER, NetProvider>::update(const K &key, const T &tuple,
692692
{
693693
impl->enc.encodeUpdate(key, tuple, space_id, index_id);
694694
impl->connector.readyToSend(*this);
695-
return RequestEncoder<BUFFER>::getSync();
695+
return impl->enc.getSync();
696696
}
697697

698698
template<class BUFFER, class NetProvider>
@@ -703,7 +703,7 @@ Connection<BUFFER, NetProvider>::upsert(const T &tuple, const O &ops,
703703
{
704704
impl->enc.encodeUpsert(tuple, ops, space_id, index_base);
705705
impl->connector.readyToSend(*this);
706-
return RequestEncoder<BUFFER>::getSync();
706+
return impl->enc.getSync();
707707
}
708708

709709
template<class BUFFER, class NetProvider>
@@ -716,7 +716,7 @@ Connection<BUFFER, NetProvider>::select(const T &key, uint32_t space_id,
716716
impl->enc.encodeSelect(key, space_id, index_id, limit,
717717
offset, iterator);
718718
impl->connector.readyToSend(*this);
719-
return RequestEncoder<BUFFER>::getSync();
719+
return impl->enc.getSync();
720720
}
721721

722722
template<class BUFFER, class NetProvider>

src/Client/RequestEncoder.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,12 @@ class RequestEncoder {
9797
const Greeting &greet);
9898

9999
/** Sync value is used as request id. */
100-
static size_t getSync() { return sync; }
100+
size_t getSync() { return sync; }
101101
static constexpr size_t PREHEADER_SIZE = 5;
102102
private:
103103
void encodeHeader(int request);
104104
BUFFER &m_Buf;
105-
inline static ssize_t sync = 0;
105+
ssize_t sync = 0;
106106
};
107107

108108
template<class BUFFER>

0 commit comments

Comments
 (0)