2012/10/16 Ildar Ismagilov <[email protected]>:
> 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

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Genode-main mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/genode-main

Reply via email to