| 447 | |
| 448 | |
| 449 | void REMOTE_release_request( Rrq* request) |
| 450 | { |
| 451 | /************************************** |
| 452 | * |
| 453 | * R E M O T E _ r e l e a s e _ r e q u e s t |
| 454 | * |
| 455 | ************************************** |
| 456 | * |
| 457 | * Functional description |
| 458 | * Release a request block and friends. |
| 459 | * |
| 460 | **************************************/ |
| 461 | Rdb* rdb = request->rrq_rdb; |
| 462 | |
| 463 | for (Rrq** p = &rdb->rdb_requests; *p; p = &(*p)->rrq_next) |
| 464 | { |
| 465 | if (*p == request) |
| 466 | { |
| 467 | *p = request->rrq_next; |
| 468 | break; |
| 469 | } |
| 470 | } |
| 471 | |
| 472 | // Get rid of request and all levels |
| 473 | |
| 474 | for (;;) |
| 475 | { |
| 476 | Rrq::rrq_repeat* tail = request->rrq_rpt.begin(); |
| 477 | const Rrq::rrq_repeat* const end = tail + request->rrq_max_msg; |
| 478 | for (; tail <= end; tail++) |
| 479 | { |
| 480 | RMessage* message = tail->rrq_message; |
| 481 | if (message) |
| 482 | { |
| 483 | if (!request->rrq_level) |
| 484 | { |
| 485 | #ifdef DEBUG_REMOTE_MEMORY |
| 486 | printf("REMOTE_release_request free format %x\n", tail->rrq_format); |
| 487 | #endif |
| 488 | delete tail->rrq_format; |
| 489 | } |
| 490 | REMOTE_release_messages(message); |
| 491 | } |
| 492 | } |
| 493 | Rrq* next = request->rrq_levels; |
| 494 | #ifdef DEBUG_REMOTE_MEMORY |
| 495 | printf("REMOTE_release_request free request %x\n", request); |
| 496 | #endif |
| 497 | delete request; |
| 498 | if (!(request = next)) |
| 499 | break; |
| 500 | } |
| 501 | } |
| 502 | |
| 503 | |
| 504 | void REMOTE_reset_request( Rrq* request, RMessage* active_message) |
no test coverage detected