From c15ae864b5d7f82c39267b4762a6b37060b77e87 Mon Sep 17 00:00:00 2001 From: Gioacchino Mazzurco Date: Sun, 10 Jun 2018 11:00:38 +0200 Subject: [PATCH] deep_search: use service serializer not serial_process Avoid tricky pointers arithmetic, thanks Cyril for suggestion --- libretroshare/src/gxs/rsgenexchange.cc | 3 +- libretroshare/src/gxs/rsgxsutil.cc | 44 +++++++++++--------------- libretroshare/src/gxs/rsgxsutil.h | 12 ++++--- 3 files changed, 28 insertions(+), 31 deletions(-) diff --git a/libretroshare/src/gxs/rsgenexchange.cc b/libretroshare/src/gxs/rsgenexchange.cc index 69344383d..7538c19c0 100644 --- a/libretroshare/src/gxs/rsgenexchange.cc +++ b/libretroshare/src/gxs/rsgenexchange.cc @@ -206,7 +206,8 @@ void RsGenExchange::tick() if(!mIntegrityCheck) { - mIntegrityCheck = new RsGxsIntegrityCheck(mDataStore,this,mGixs); + mIntegrityCheck = new RsGxsIntegrityCheck( mDataStore, this, + *mSerialiser, mGixs); mIntegrityCheck->start("gxs integrity"); mChecking = true; } diff --git a/libretroshare/src/gxs/rsgxsutil.cc b/libretroshare/src/gxs/rsgxsutil.cc index 2c23d9e89..5e3ed9b83 100644 --- a/libretroshare/src/gxs/rsgxsutil.cc +++ b/libretroshare/src/gxs/rsgxsutil.cc @@ -149,9 +149,9 @@ bool RsGxsMessageCleanUp::clean() RsGxsIntegrityCheck::RsGxsIntegrityCheck( RsGeneralDataService* const dataService, RsGenExchange* genex, - RsGixs* gixs ) : - mDs(dataService), mGenExchangeClient(genex), mDone(false), - mIntegrityMutex("integrity"), mGixs(gixs) {} + RsSerialType& serializer, RsGixs* gixs ) : + mDs(dataService), mGenExchangeClient(genex), mSerializer(serializer), + mDone(false), mIntegrityMutex("integrity"), mGixs(gixs) {} void RsGxsIntegrityCheck::run() { @@ -205,28 +205,18 @@ bool RsGxsIntegrityCheck::check() #ifdef RS_DEEP_SEARCH if(isGxsChannels) { - RsGxsChannelGroup cg; RsGxsGrpMetaData meta; - meta.deserialise(grp->meta.bin_data, grp->meta.bin_len); - /* TODO: Apparently a copy of the pointer to - * grp.bin_data is stored into grp.bin_data thus - * breaking the deserialization, skipping the pointer - * (8 bytes on x86_64 debug build) fix the - * deserilization, talk to Cyril how to properly fix - * this.*/ - RsGenericSerializer::SerializeContext ctx( - static_cast(grp->grp.bin_data)+8, - grp->grp.bin_len-8 ); + uint32_t blz = grp->grp.bin_len; + RsItem* rIt = mSerializer.deserialise(grp->grp.bin_data, + &blz); - RsGxsChannelGroupItem cgIt; - cgIt.serial_process( RsGenericSerializer::DESERIALIZE, - ctx ); - - if(ctx.mOk) + if( RsGxsChannelGroupItem* cgIt = + dynamic_cast(rIt) ) { - cgIt.toChannelGroup(cg, false); + RsGxsChannelGroup cg; + cgIt->toChannelGroup(cg, false); cg.mMeta = meta; DeepSearch::indexChannelGroup(cg); @@ -239,12 +229,14 @@ bool RsGxsIntegrityCheck::check() std::cout << __PRETTY_FUNCTION__ << " ||Group: " << meta.mGroupName << " ||doesn't seems a channel" - << " ||ctx.mOk: " << ctx.mOk - << " ||ctx.mData: " << (void*)ctx.mData - << " ||ctx.mSize: " << ctx.mSize - << " ||grp->grp.bin_data: " << grp->grp.bin_data - << " ||grp->grp.bin_len: " << grp->grp.bin_len - << std::endl; + << " ||grp->grp.bin_data: " + << grp->grp.bin_data + << " ||grp->grp.bin_len: " + << grp->grp.bin_len + << " ||rIt: " << rIt << " ||blz: " << blz + << " ||cgIt: " << cgIt << std::endl; + + delete rIt; } #endif diff --git a/libretroshare/src/gxs/rsgxsutil.h b/libretroshare/src/gxs/rsgxsutil.h index 70e832c3e..faea08040 100644 --- a/libretroshare/src/gxs/rsgxsutil.h +++ b/libretroshare/src/gxs/rsgxsutil.h @@ -201,7 +201,9 @@ public: * @param chunkSize * @param sleepPeriod */ - RsGxsIntegrityCheck(RsGeneralDataService* const dataService, RsGenExchange *genex, RsGixs *gixs); + RsGxsIntegrityCheck( RsGeneralDataService* const dataService, + RsGenExchange *genex, RsSerialType& gxsSerialiser, + RsGixs *gixs); bool check(); bool isDone(); @@ -213,13 +215,15 @@ public: private: RsGeneralDataService* const mDs; - RsGenExchange *mGenExchangeClient; + RsGenExchange *mGenExchangeClient; + RsSerialType& mSerializer; + bool mDone; RsMutex mIntegrityMutex; std::list mDeletedGrps; std::map > mDeletedMsgs; - - RsGixs *mGixs ; + + RsGixs* mGixs; }; class GroupUpdate