diff --git a/repos/dde_linux/src/lib/lxip/nic_handler.cc b/repos/dde_linux/src/lib/lxip/nic_handler.cc index 79825aa213..73e11c2ecb 100644 --- a/repos/dde_linux/src/lib/lxip/nic_handler.cc +++ b/repos/dde_linux/src/lib/lxip/nic_handler.cc @@ -47,6 +47,8 @@ class Nic_client if (_nic.link_state() == false || lxip_do_dhcp() == false) return; + Lx::timer_update_jiffies(); + /* reconnect dhcp client */ lxip_configure_dhcp(); } @@ -56,6 +58,8 @@ class Nic_client */ void _packet_avail() { + Lx::timer_update_jiffies(); + /* process a batch of only MAX_PACKETS in one run */ enum { MAX_PACKETS = 20 }; diff --git a/repos/dde_linux/src/lib/lxip/socket_handler.cc b/repos/dde_linux/src/lib/lxip/socket_handler.cc index 9649e9ce73..24c008c296 100644 --- a/repos/dde_linux/src/lib/lxip/socket_handler.cc +++ b/repos/dde_linux/src/lib/lxip/socket_handler.cc @@ -378,6 +378,8 @@ class Net::Socketcall : public Lxip::Socketcall, void _dispatch() { + Lx::timer_update_jiffies(); + switch (_call.opcode) { case OP_ACCEPT : _do_accept(); break; diff --git a/repos/dde_linux/src/lib/lxip/timer_handler.cc b/repos/dde_linux/src/lib/lxip/timer_handler.cc index 103572eb08..61c289e8c3 100644 --- a/repos/dde_linux/src/lib/lxip/timer_handler.cc +++ b/repos/dde_linux/src/lib/lxip/timer_handler.cc @@ -178,8 +178,11 @@ class Lx::Timer if (ctx->timeout > jiffies) break; + ctx->pending = false; ctx->function(); - del(ctx->timer); + + if (!ctx->pending) + del(ctx->timer); } /* tick the higher layer of the component */ @@ -360,3 +363,6 @@ int del_timer(struct timer_list *timer) return rv; } + + +void Lx::timer_update_jiffies() { update_jiffies(); }