| 5957 | |
| 5958 | |
| 5959 | static void release_transaction( Rtr* transaction) |
| 5960 | { |
| 5961 | /************************************** |
| 5962 | * |
| 5963 | * r e l e a s e _ t r a n s a c t i o n |
| 5964 | * |
| 5965 | ************************************** |
| 5966 | * |
| 5967 | * Functional description |
| 5968 | * Release a transaction block and friends. |
| 5969 | * |
| 5970 | **************************************/ |
| 5971 | Rdb* rdb = transaction->rtr_rdb; |
| 5972 | rdb->rdb_port->releaseObject(transaction->rtr_id); |
| 5973 | |
| 5974 | while (Rbl* blob = transaction->rtr_blobs.getFirst()) |
| 5975 | release_blob(blob); |
| 5976 | |
| 5977 | while (transaction->rtr_cursors.hasData()) |
| 5978 | { |
| 5979 | Rsr* const statement = transaction->rtr_cursors.pop(); |
| 5980 | fb_assert(statement->rsr_cursor); |
| 5981 | statement->rsr_cursor->release(); |
| 5982 | statement->rsr_cursor = NULL; |
| 5983 | } |
| 5984 | |
| 5985 | for (Rtr** p = &rdb->rdb_transactions; *p; p = &(*p)->rtr_next) |
| 5986 | { |
| 5987 | if (*p == transaction) |
| 5988 | { |
| 5989 | *p = transaction->rtr_next; |
| 5990 | break; |
| 5991 | } |
| 5992 | } |
| 5993 | |
| 5994 | #ifdef DEBUG_REMOTE_MEMORY |
| 5995 | printf("release_transact(server) free transaction %x\n", transaction); |
| 5996 | #endif |
| 5997 | delete transaction; |
| 5998 | } |
| 5999 | |
| 6000 | |
| 6001 | ISC_STATUS rem_port::seek_blob(P_SEEK* seek, PACKET* sendL) |
no test coverage detected