| 200 | |
| 201 | |
| 202 | void TRA_attach_request(Jrd::jrd_tra* transaction, Jrd::Request* request) |
| 203 | { |
| 204 | // When request finishes normally transaction reference is not cleared. |
| 205 | // Then if afterwards request is restarted TRA_attach_request is called again. |
| 206 | if (request->req_transaction) |
| 207 | { |
| 208 | if (request->req_transaction == transaction) |
| 209 | return; |
| 210 | TRA_detach_request(request); |
| 211 | } |
| 212 | |
| 213 | fb_assert(request->req_transaction == NULL); |
| 214 | fb_assert(request->req_tra_next == NULL); |
| 215 | fb_assert(request->req_tra_prev == NULL); |
| 216 | |
| 217 | // Assign transaction reference |
| 218 | request->req_transaction = transaction; |
| 219 | |
| 220 | // Add request to the doubly linked list |
| 221 | if (transaction->tra_requests) |
| 222 | { |
| 223 | fb_assert(transaction->tra_requests->req_tra_prev == NULL); |
| 224 | transaction->tra_requests->req_tra_prev = request; |
| 225 | request->req_tra_next = transaction->tra_requests; |
| 226 | } |
| 227 | transaction->tra_requests = request; |
| 228 | } |
| 229 | |
| 230 | void TRA_detach_request(Jrd::Request* request) |
| 231 | { |
no test coverage detected