diff --git a/src/base/mem_block.hpp b/src/base/mem_block.hpp index 75dc16af47..c5594e1410 100644 --- a/src/base/mem_block.hpp +++ b/src/base/mem_block.hpp @@ -68,6 +68,8 @@ namespace cubmem inline bool is_valid () const; + inline void freemem (); + inline char *move_ptr (); //NOT RECOMMENDED! use move semantics: std::move() private: @@ -269,6 +271,17 @@ namespace cubmem return (dim != 0 && ptr != NULL); } + void + block::freemem () + { + if (is_valid ()) + { + delete[] ptr; + dim = 0; + ptr = NULL; + } + } + char * block::move_ptr () { diff --git a/src/sp/pl_compile_handler.cpp b/src/sp/pl_compile_handler.cpp index c748c9ceac..246cf6368f 100644 --- a/src/sp/pl_compile_handler.cpp +++ b/src/sp/pl_compile_handler.cpp @@ -154,13 +154,8 @@ namespace cubpl m_stack->get_data_queue ().pop (); } - // free phase - if (response_blk.is_valid ()) - { - delete [] response_blk.ptr; - response_blk.ptr = NULL; - response_blk.dim = 0; - } + // free reponse block + response_blk.freemem (); } while (error_code == NO_ERROR && code != METHOD_REQUEST_COMPILE); diff --git a/src/sp/pl_connection.hpp b/src/sp/pl_connection.hpp index 4d53be06c8..d712b9dbda 100644 --- a/src/sp/pl_connection.hpp +++ b/src/sp/pl_connection.hpp @@ -145,12 +145,8 @@ namespace cubpl { cubmem::block b = pack_data_block (std::forward (args)...); int status = send_buffer (b); - if (b.is_valid ()) - { - delete [] b.ptr; - b.ptr = NULL; - b.dim = 0; - } + b.freemem (); + return status; } diff --git a/src/sp/pl_executor.cpp b/src/sp/pl_executor.cpp index b229efdd41..5d51ccbcad 100644 --- a/src/sp/pl_executor.cpp +++ b/src/sp/pl_executor.cpp @@ -444,13 +444,8 @@ namespace cubpl m_stack->get_data_queue ().pop (); } - // free phase - if (response_blk.is_valid ()) - { - delete [] response_blk.ptr; - response_blk.ptr = NULL; - response_blk.dim = 0; - } + // free response block + response_blk.freemem (); } while (error_code == NO_ERROR && start_code == SP_CODE_INTERNAL_JDBC); @@ -637,7 +632,7 @@ namespace cubpl if (blk.is_valid ()) { m_stack->send_data_to_java (blk); - delete[] blk.ptr; + blk.freemem (); } return error; @@ -802,13 +797,7 @@ namespace cubpl } error = m_stack->send_data_to_java (blk); - if (blk.is_valid ()) - { - delete [] blk.ptr; - blk.ptr = NULL; - blk.dim = 0; - } - + blk.freemem (); return error; } @@ -1026,11 +1015,7 @@ namespace cubpl db_value_clear (&res); error = m_stack->send_data_to_java (blk); - - if (blk.is_valid ()) - { - delete[] blk.ptr; - } + blk.freemem (); return error; } diff --git a/src/sp/pl_sr.cpp b/src/sp/pl_sr.cpp index 30a59aaf9c..721ee30f8b 100644 --- a/src/sp/pl_sr.cpp +++ b/src/sp/pl_sr.cpp @@ -570,12 +570,7 @@ namespace cubpl } exit: - if (ping_response.is_valid ()) - { - delete [] ping_response.ptr; - ping_response.ptr = NULL; - ping_response.dim = 0; - } + ping_response.freemem (); cv.reset (); @@ -605,6 +600,8 @@ namespace cubpl { packing_unpacker deserializator (bootstrap_response); deserializator.unpack_int (error); + + bootstrap_response.freemem (); } return error;