| 1468 | } |
| 1469 | |
| 1470 | Result HttpConnectionsPool::Memory::assignTo(HttpConnectionsPool::Configuration conf, |
| 1471 | SpanWithStride<HttpConnection> connectionsSpan) |
| 1472 | { |
| 1473 | const size_t numClients = connectionsSpan.sizeInElements(); |
| 1474 | SC_TRY_MSG(allReadQueue.sizeInElements() >= numClients * conf.readQueueSize, "Insufficient read queue"); |
| 1475 | SC_TRY_MSG(allWriteQueue.sizeInElements() >= numClients * conf.writeQueueSize, "Insufficient write queue"); |
| 1476 | SC_TRY_MSG(allBuffers.sizeInElements() >= numClients * conf.buffersQueueSize, "Insufficient buffers queue"); |
| 1477 | SC_TRY_MSG(allHeaders.sizeInElements() >= numClients * conf.headerBytesLength, "Insufficient headers storage"); |
| 1478 | SC_TRY_MSG(allStreams.sizeInElements() >= numClients * conf.streamBytesLength, "Insufficient streams storage"); |
| 1479 | for (size_t idx = 0; idx < numClients; ++idx) |
| 1480 | { |
| 1481 | HttpConnection& connection = connectionsSpan[idx]; |
| 1482 | |
| 1483 | const size_t NumSlices = conf.readQueueSize; |
| 1484 | const size_t SliceLength = conf.streamBytesLength / NumSlices; |
| 1485 | |
| 1486 | Span<AsyncBufferView> buffers; |
| 1487 | SC_TRY(allBuffers.sliceStartLength(idx * conf.buffersQueueSize, conf.buffersQueueSize, buffers)); |
| 1488 | Span<char> streamStorage; |
| 1489 | SC_TRY(allStreams.sliceStartLength(idx * conf.streamBytesLength, conf.streamBytesLength, streamStorage)); |
| 1490 | for (size_t sliceIdx = 0; sliceIdx < NumSlices; ++sliceIdx) |
| 1491 | { |
| 1492 | Span<char> slice; |
| 1493 | SC_TRY(streamStorage.sliceStartLength(sliceIdx * SliceLength, SliceLength, slice)); |
| 1494 | buffers[sliceIdx] = slice; |
| 1495 | buffers[sliceIdx].setReusable(true); |
| 1496 | } |
| 1497 | connection.buffersPool.setBuffers(buffers); |
| 1498 | Span<char> headerStorage; |
| 1499 | SC_TRY(allHeaders.sliceStartLength(idx * conf.headerBytesLength, conf.headerBytesLength, headerStorage)); |
| 1500 | connection.setHeaderMemory(headerStorage); |
| 1501 | Span<AsyncReadableStream::Request> readQueue; |
| 1502 | SC_TRY(allReadQueue.sliceStartLength(idx * conf.readQueueSize, conf.readQueueSize, readQueue)); |
| 1503 | Span<AsyncWritableStream::Request> writeQueue; |
| 1504 | SC_TRY(allWriteQueue.sliceStartLength(idx * conf.writeQueueSize, conf.writeQueueSize, writeQueue)); |
| 1505 | connection.readableSocketStream.setReadQueue(readQueue); |
| 1506 | connection.writableSocketStream.setWriteQueue(writeQueue); |
| 1507 | } |
| 1508 | return Result(true); |
| 1509 | } |
| 1510 | } // namespace SC |
no test coverage detected