Using negative cache index
Ildar
devix84 at ...9...
Thu Oct 18 11:29:48 CEST 2012
2012/10/16 Ildar Ismagilov <devix84 at ...9...>:
> In function Req_cache::remove on ports-foc/src/lib/l4lx/genode_block.cc file:
>
> void remove(void *packet, void **request)
> {
> int idx = _find(packet);
>
> if (idx < 0) {
> *request = 0;
> PERR("Req cache entry not found!");
> }
> *request = _cache[idx].req; // <--- if idx is -1, this negative
> index used for access _cache array elements
> _cache[idx].pkt = 0;
> _cache[idx].req = 0;
> }
>
> should be:
>
> void remove(void *packet, void **request)
> {
> int idx = _find(packet);
>
> if (idx < 0) {
> *request = 0;
> PERR("Req cache entry not found!");
> }
> else {
> *request = _cache[idx].req;
> _cache[idx].pkt = 0;
> _cache[idx].req = 0;
> }
> }
>
> --
> Best regards
> Ildar
Test case is intensive usage of block driver:
If "devices[idx]->cache()->insert(addr, req);" function called from
genode_block_request when Req_cache::_cache array is full, the
Req_cache::_find(0) return -1, and data don't added to Req_cache::_cache
array. Next "devices[idx]->cache()->remove(session->tx()->packet_content(packet),
&req)"
function call from "genode_block_collect_responses" will delete data
from Req_cache::_cache array but Req_cache::_find(packet) will return
-1 because previous "Req_cache::insert"
call not inserted item to Req_cache::_cache array and this bug appears.
--
Best regards
Ildar
More information about the users
mailing list