| 391 | } |
| 392 | |
| 393 | int |
| 394 | CacheVC::openWriteCloseDataDone(int event, Event *e) |
| 395 | { |
| 396 | int ret = 0; |
| 397 | cancel_trigger(); |
| 398 | |
| 399 | if (event == AIO_EVENT_DONE) { |
| 400 | set_io_not_in_progress(); |
| 401 | } else if (is_io_in_progress()) { |
| 402 | return EVENT_CONT; |
| 403 | } |
| 404 | if (!io.ok()) { |
| 405 | return openWriteCloseDir(event, e); |
| 406 | } |
| 407 | { |
| 408 | CACHE_TRY_LOCK(lock, stripe->mutex, this_ethread()); |
| 409 | if (!lock.is_locked()) { |
| 410 | VC_LOCK_RETRY_EVENT(); |
| 411 | } |
| 412 | if (!fragment) { |
| 413 | ink_assert(key == earliest_key); |
| 414 | earliest_dir = dir; |
| 415 | } else { |
| 416 | // Store the offset only if there is a table. |
| 417 | // Currently there is no alt (and thence no table) for non-HTTP. |
| 418 | if (alternate.valid()) { |
| 419 | alternate.push_frag_offset(write_pos); |
| 420 | } |
| 421 | } |
| 422 | fragment++; |
| 423 | write_pos += write_len; |
| 424 | dir_insert(&key, stripe, &dir); |
| 425 | blocks = iobufferblock_skip(blocks.get(), &offset, &length, write_len); |
| 426 | next_CacheKey(&key, &key); |
| 427 | if (length) { |
| 428 | write_len = length; |
| 429 | if (write_len > MAX_FRAG_SIZE) { |
| 430 | write_len = MAX_FRAG_SIZE; |
| 431 | } |
| 432 | if ((ret = do_write_call()) == EVENT_RETURN) { |
| 433 | goto Lcallreturn; |
| 434 | } |
| 435 | return ret; |
| 436 | } |
| 437 | f.data_done = 1; |
| 438 | return openWriteCloseHead(event, e); // must be called under vol lock from here |
| 439 | } |
| 440 | Lcallreturn: |
| 441 | return handleEvent(AIO_EVENT_DONE, nullptr); |
| 442 | } |
| 443 | |
| 444 | int |
| 445 | CacheVC::openWriteClose(int event, Event *e) |
nothing calls this directly
no test coverage detected