39c39,41
< for (; i != end; ++i) {
---
> bool cont = true;
>
> while (i != end && cont) {
43,63c45,46
< if (target->intersect(pkt)) {
< uint8_t* pkt_data;
< uint8_t* write_data;
< int data_size;
< if (target->getAddr() < pkt->getAddr()) {
< int offset = pkt->getAddr() - target->getAddr();
< pkt_data = pkt->getPtr<uint8_t>();
< write_data = target->getPtr<uint8_t>() + offset;
< data_size = target->getSize() - offset;
< assert(data_size > 0);
< if (data_size > pkt->getSize())
< data_size = pkt->getSize();
< } else {
< int offset = target->getAddr() - pkt->getAddr();
< pkt_data = pkt->getPtr<uint8_t>() + offset;
< write_data = target->getPtr<uint8_t>();
< data_size = pkt->getSize() - offset;
< assert(data_size > pkt->getSize());
< if (data_size > target->getSize())
< data_size = target->getSize();
< }
---
> if (target->intersect(pkt))
> fixPacket(pkt, target);
65,70d47
< if (pkt->isWrite()) {
< memcpy(pkt_data, write_data, data_size);
< } else {
< memcpy(write_data, pkt_data, data_size);
< }
< }
73c50,51
< recvAtomic(pkt);
---
> if (cont)
> recvAtomic(pkt);