diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/dpi/impl/DpiStatisticsManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/dpi/impl/DpiStatisticsManager.java
index 23cb8b8..5ced9f5 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/dpi/impl/DpiStatisticsManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/dpi/impl/DpiStatisticsManager.java
@@ -123,8 +123,7 @@
     @Deactivate
     public void deactivate() {
         log.info("Deactivated...");
-        dpiStatisticsListener.stop();
-        dpiListenerThread.shutdown();
+        dpiListenerThread.shutdownNow();
         log.info("Stopped");
     }
 
@@ -377,29 +376,6 @@
             receiveDpiResult();
         }
 
-        public void stop() {
-            try {
-                if (serverSocket != null) {
-                    if (clientSocket != null) {
-                        if (in != null) {
-                            in.close();
-                        }
-                        if (out != null) {
-                            out.close();
-                        }
-                        clientSocket.close();
-                        //log.debug("DpiResultListener: stop(): Socket close() is done...");
-                    }
-                    serverSocket.close();
-                    //log.debug("DpiResultListener: stop(): Server close() is done...");
-                }
-            } catch (Exception e) {
-                log.error("DpiStatisticsListener: stop(): Server Socket closing error, exception={}",
-                          e.toString());
-            }
-            log.debug("DpiStatisticsListener: stop(): stopped...");
-        }
-
         private void receiveDpiResult() {
             try {
                 serverSocket = new ServerSocket(port);
@@ -410,7 +386,7 @@
             }
 
             try {
-                while (true) {
+                while (!Thread.currentThread().isInterrupted()) {
                     if (clientSocket == null) {
                         log.info("DpiStatisticsListener: Waiting for accepting from dpi client...");
                         clientSocket = serverSocket.accept();
@@ -450,6 +426,26 @@
             } catch (Exception e) {
                 log.error("DpiStatisticsListener: Exception = {}", e.toString());
                 return;
+            } finally {
+                try {
+                    if (serverSocket != null) {
+                        if (clientSocket != null) {
+                            if (in != null) {
+                                in.close();
+                            }
+                            if (out != null) {
+                                out.close();
+                            }
+                            clientSocket.close();
+                            //log.debug("DpiResultListener: stop(): Socket close() is done...");
+                        }
+                        serverSocket.close();
+                        //log.debug("DpiResultListener: stop(): Server close() is done...");
+                    }
+                } catch (Exception e) {
+                    log.error("DpiStatisticsListener: stop(): Server Socket closing error, exception={}",
+                            e.toString());
+                }
             }
         }
 
