diff options
| author | Lu Qiuwen <[email protected]> | 2023-10-30 18:50:01 +0800 |
|---|---|---|
| committer | Lu Qiuwen <[email protected]> | 2023-10-30 18:50:01 +0800 |
| commit | c49cdd6dcab6572287efbdb1f97e4d33b2012ca6 (patch) | |
| tree | f8b986868f9df47d44d7e0edb648b513bc1b56f3 /infra | |
| parent | a2cb9faeaf0089f37d91a33af15d4476ee34d034 (diff) | |
bugfix: fix the crash problem when the app opens a tx only virtual device.v4.6.59-20231030
Diffstat (limited to 'infra')
| -rw-r--r-- | infra/src/vnode_common.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/infra/src/vnode_common.c b/infra/src/vnode_common.c index 66c7f5d..1c8abce 100644 --- a/infra/src/vnode_common.c +++ b/infra/src/vnode_common.c @@ -438,7 +438,13 @@ struct vnode_prod_stat * __vnode_common_prod_stat_get(struct vnode_prod * prod) for (unsigned int consq = 0; consq < cons->nr_consq; consq++) { - struct tunnel_desc * tunnel_desc = *tunnel_block_locate(prod->block, prodq, consq); + struct tunnel_block * block = ACCESS_ONCE(prod->block); + if (block == NULL) + { + return prod_stat; + } + + struct tunnel_desc * tunnel_desc = *tunnel_block_locate(block, prodq, consq); assert(tunnel_desc != NULL); prod_on_line += tunnel_desc->on_line; @@ -477,7 +483,13 @@ struct vnode_cons_stat * __vnode_common_cons_stat_get(struct vnode_cons * cons) for(unsigned int prodq = 0; prodq < prod->nr_prodq; prodq++) { - struct tunnel_desc * tunnel_desc = *tunnel_block_locate(prod->block, prodq, consq); + struct tunnel_block * block = ACCESS_ONCE(cons->block); + if(block == NULL) + { + return cons_stat; + } + + struct tunnel_desc * tunnel_desc = *tunnel_block_locate(block, prodq, consq); assert(tunnel_desc != NULL); consq_on_line += tunnel_desc->on_line; |
