diff --git a/repos/dde_linux/src/lib/wifi/socket_call.cc b/repos/dde_linux/src/lib/wifi/socket_call.cc
index 61041b2375..24a3c0708c 100644
--- a/repos/dde_linux/src/lib/wifi/socket_call.cc
+++ b/repos/dde_linux/src/lib/wifi/socket_call.cc
@@ -364,8 +364,16 @@ class Lx::Socket
 				break;
 			}
 
+			/*
+			 * Save old call opcode as we may only release the blocker
+			 * when actually did something useful, i.e., were called by
+			 * some socket operation and not by kicking the socket.
+			 */
+			Call::Opcode old = _call.opcode;
+
 			_call.opcode = Call::NONE;
-			_block.up();
+
+			if (old != Call::NONE) { _block.up(); }
 		}
 
 		void submit_and_block()
@@ -399,6 +407,7 @@ void Lx::socket_kick()
 	if (!_socket) { return; }
 
 	_socket->unblock_task();
+	Lx::scheduler().schedule();
 }