Vallishp commented on code in PR #33622:
URL: https://github.com/apache/doris/pull/33622#discussion_r1564910310


##########
be/src/util/block_compression.cpp:
##########
@@ -373,77 +375,75 @@ class Lz4fBlockCompression : public BlockCompressionCodec 
{
 private:
     // acquire a compression ctx from pool, release while finish compress,
     // delete if compression failed
-    Status _acquire_compression_ctx(CContext** out) {
+    Status _acquire_compression_ctx(std::shared_ptr<CContext>& out) {
         std::lock_guard<std::mutex> l(_ctx_c_mutex);
         if (_ctx_c_pool.empty()) {
-            CContext* context = new (std::nothrow) CContext();
-            if (context == nullptr) {
+            std::shared_ptr<CContext> localCtx = CContext::create_shared();
+            if (localCtx.get() == nullptr) {
                 return Status::InvalidArgument("failed to new LZ4F CContext");
             }
-            auto res = LZ4F_createCompressionContext(&context->ctx, 
LZ4F_VERSION);
+            auto res = LZ4F_createCompressionContext(&localCtx->ctx, 
LZ4F_VERSION);
             if (LZ4F_isError(res) != 0) {
                 return Status::InvalidArgument(strings::Substitute(
                         "LZ4F_createCompressionContext error, res=$0", 
LZ4F_getErrorName(res)));
             }
-            *out = context;
+            out = localCtx;
             return Status::OK();
         }
-        *out = _ctx_c_pool.back();
+        out = _ctx_c_pool.back();
         _ctx_c_pool.pop_back();
         return Status::OK();
     }
-    void _release_compression_ctx(CContext* context) {
+    void _release_compression_ctx(std::shared_ptr<CContext> context) {
         DCHECK(context);
         std::lock_guard<std::mutex> l(_ctx_c_mutex);
         _ctx_c_pool.push_back(context);
     }
-    void _delete_compression_ctx(CContext* context) {
+    void _delete_compression_ctx(std::shared_ptr<CContext> context) {
         DCHECK(context);
         LZ4F_freeCompressionContext(context->ctx);
-        delete context;
     }
 
-    Status _acquire_decompression_ctx(DContext** out) {
+    Status _acquire_decompression_ctx(std::shared_ptr<DContext>& out) {
         std::lock_guard<std::mutex> l(_ctx_d_mutex);
         if (_ctx_d_pool.empty()) {
-            DContext* context = new (std::nothrow) DContext();
-            if (context == nullptr) {
+            std::shared_ptr<DContext> localCtx = DContext::create_shared();
+            if (localCtx.get() == nullptr) {
                 return Status::InvalidArgument("failed to new LZ4F DContext");
             }
-            auto res = LZ4F_createDecompressionContext(&context->ctx, 
LZ4F_VERSION);
+            auto res = LZ4F_createDecompressionContext(&localCtx->ctx, 
LZ4F_VERSION);
             if (LZ4F_isError(res) != 0) {
                 return Status::InvalidArgument(strings::Substitute(
                         "LZ4F_createDeompressionContext error, res=$0", 
LZ4F_getErrorName(res)));
             }
-            *out = context;
+            out = localCtx;
             return Status::OK();
         }
-        *out = _ctx_d_pool.back();
+        out = _ctx_d_pool.back();
         _ctx_d_pool.pop_back();
         return Status::OK();
     }
-    void _release_decompression_ctx(DContext* context) {
+    void _release_decompression_ctx(std::shared_ptr<DContext> context) {
         DCHECK(context);
         // reset decompression context to avoid ERROR_maxBlockSize_invalid
         LZ4F_resetDecompressionContext(context->ctx);
         std::lock_guard<std::mutex> l(_ctx_d_mutex);
         _ctx_d_pool.push_back(context);
     }
-    void _delete_decompression_ctx(DContext* context) {
+    void _delete_decompression_ctx(std::shared_ptr<DContext> context) {
         DCHECK(context);
         LZ4F_freeDecompressionContext(context->ctx);

Review Comment:
   Have updated it . i have run be UT for BlockCompressionTest. any other test 
case i need to run manually?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to