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
