From: Adriano d. S. F. <asf...@us...> - 2008-03-03 00:47:36
|
Update of /cvsroot/firebird/firebird2/src/dsql In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv15080/src/dsql Modified Files: dsql.cpp metd.epp pass1.cpp Log Message: 1) Restore logic of not handled exceptions 2) Initialize some status vectors Index: dsql.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/dsql/dsql.cpp,v retrieving revision 1.227 retrieving revision 1.228 diff -b -U3 -r1.227 -r1.228 --- dsql.cpp 2 Mar 2008 21:16:08 -0000 1.227 +++ dsql.cpp 3 Mar 2008 00:46:59 -0000 1.228 @@ -940,16 +940,27 @@ { thread_db* tdbb = JRD_get_thread_data(); - ISC_STATUS_ARRAY status_vector; + ISC_STATUS_ARRAY status_vector = {0}; if (request->req_request) { if (request->req_type == REQ_GET_SEGMENT || request->req_type == REQ_PUT_SEGMENT) { + ISC_STATUS* old_status = tdbb->tdbb_status_vector; + + tdbb->tdbb_status_vector = status_vector; + try + { BLB_close(tdbb, request->req_blob->blb_blob); request->req_blob->blb_blob = NULL; } + catch (Firebird::Exception&) + { + } + + tdbb->tdbb_status_vector = old_status; + } else { Database::Checkout dcoHolder(request->req_dbb->dbb_database); @@ -1081,7 +1092,7 @@ memset(blob_id, 0, sizeof(bid)); request->req_blob->blb_blob = BLB_create2(tdbb, request->req_transaction, - blob_id, bpb_length, const_cast<const UCHAR*>(bpb)); + blob_id, bpb_length, bpb); map_in_out(NULL, blob->blb_open_out_msg, out_blr_length, out_blr, @@ -1359,7 +1370,7 @@ } } - ISC_STATUS_ARRAY local_status; + ISC_STATUS_ARRAY local_status = {0}; // REQ_EXEC_BLOCK has no outputs so there are no out_msg // supplied from client side, but REQ_EXEC_BLOCK requires // 2-byte message for EOS synchronization @@ -2143,6 +2154,8 @@ **/ static dsql_dbb* init(Attachment* attachment) { + thread_db* tdbb = JRD_get_thread_data(); + if (!attachment->att_dsql_instance) { MemoryPool& pool = *attachment->att_database->createPool(); @@ -2154,15 +2167,22 @@ SCHAR buffer[BUFFER_TINY]; + ISC_STATUS* old_status = tdbb->tdbb_status_vector; + ISC_STATUS_ARRAY status_vector = {0}; + + tdbb->tdbb_status_vector = status_vector; try { INF_database_info(db_hdr_info_items, sizeof(db_hdr_info_items), buffer, sizeof(buffer)); } catch (Firebird::Exception&) { + tdbb->tdbb_status_vector = old_status; return database; } + tdbb->tdbb_status_vector = old_status; + const UCHAR* data = reinterpret_cast<UCHAR*>(buffer); UCHAR p; while ((p = *data++) != isc_info_end) @@ -2838,10 +2858,23 @@ // If a request has been compiled, release it now - if (request->req_request) { + if (request->req_request) + { + ISC_STATUS* old_status = tdbb->tdbb_status_vector; + ISC_STATUS_ARRAY status_vector = {0}; + + tdbb->tdbb_status_vector = status_vector; + try + { CMP_release(tdbb, request->req_request); request->req_request = NULL; } + catch (Firebird::Exception&) + { + } + + tdbb->tdbb_status_vector = old_status; + } // free blr memory request->req_blr_data.free(); Index: metd.epp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/dsql/metd.epp,v retrieving revision 1.116 retrieving revision 1.117 diff -b -U3 -r1.116 -r1.117 --- metd.epp 2 Mar 2008 21:16:09 -0000 1.116 +++ metd.epp 3 Mar 2008 00:46:59 -0000 1.117 @@ -403,11 +403,23 @@ continue; } + ISC_STATUS* old_status = tdbb->tdbb_status_vector; + ISC_STATUS_ARRAY status_vector = {0}; + + tdbb->tdbb_status_vector = status_vector; + try + { BLB_close(tdbb, blob_handle); blob_handle = NULL; + } + catch (Firebird::Exception&) + { + } - /* the default string must be of the form: - blr_version4 blr_literal ..... blr_eoc */ + tdbb->tdbb_status_vector = old_status; + + // the default string must be of the form: + // blr_version4 blr_literal ..... blr_eoc fb_assert((buffer[0] == blr_version4) || (buffer[0] == blr_version5)); fb_assert(buffer[1] == blr_literal); } @@ -781,8 +793,18 @@ continue; } + ISC_STATUS* old_status = tdbb->tdbb_status_vector; + ISC_STATUS_ARRAY status_vector = {0}; + + tdbb->tdbb_status_vector = status_vector; + try + { BLB_close(tdbb, blob_handle); blob_handle = NULL; + } + catch (Firebird::Exception&) + { + } /* the default string must be of the form: blr_version4 blr_literal ..... blr_eoc */ Index: pass1.cpp =================================================================== RCS file: /cvsroot/firebird/firebird2/src/dsql/pass1.cpp,v retrieving revision 1.356 retrieving revision 1.357 diff -b -U3 -r1.356 -r1.357 --- pass1.cpp 1 Mar 2008 19:32:16 -0000 1.356 +++ pass1.cpp 3 Mar 2008 00:46:59 -0000 1.357 @@ -3747,8 +3747,6 @@ constant->nod_desc.dsc_length -= adjust; - ISC_STATUS_ARRAY status_vector = {0}; - CharSet* charSet = INTL_charset_lookup(tdbb, INTL_GET_CHARSET(&constant->nod_desc)); if (!charSet->wellFormed(string->str_length, |