Version 3.1.0: ServerBridge
[nikiroo-utils.git] / src / be / nikiroo / utils / serial / server / Server.java
index 36806d6b61924bd60d5d0d1d2c6afca68d878893..be847d02884ec3112affd0d730d0d364b158e458 100644 (file)
@@ -184,8 +184,17 @@ abstract class Server implements Runnable {
 
                        while (started && !exiting) {
                                count(1);
-                               Socket s = ss.accept();
-                               createConnectActionServer(s).connectAsync();
+                               final Socket s = ss.accept();
+                               new Thread(new Runnable() {
+                                       @Override
+                                       public void run() {
+                                               try {
+                                                       createConnectActionServer(s).connect();
+                                               } finally {
+                                                       count(-1);
+                                               }
+                                       }
+                               }).start();
                        }
 
                        // Will be covered by @link{Server#stop(long)} for timeouts
@@ -283,19 +292,6 @@ abstract class Server implements Runnable {
                }
        }
 
-       /**
-        * This method will be called on errors.
-        * <p>
-        * By default, it will only call the trace handler (so you may want to call
-        * super {@link Server#onError} if you override it).
-        * 
-        * @param e
-        *            the error
-        */
-       protected void onError(Exception e) {
-               tracer.error(e);
-       }
-
        /**
         * Change the number of currently serviced actions.
         * 
@@ -304,13 +300,26 @@ abstract class Server implements Runnable {
         * 
         * @return the current number after this operation
         */
-       int count(int change) {
+       private int count(int change) {
                synchronized (counterLock) {
                        counter += change;
                        return counter;
                }
        }
 
+       /**
+        * This method will be called on errors.
+        * <p>
+        * By default, it will only call the trace handler (so you may want to call
+        * super {@link Server#onError} if you override it).
+        * 
+        * @param e
+        *            the error
+        */
+       protected void onError(Exception e) {
+               tracer.error(e);
+       }
+
        /**
         * Create a {@link Socket}.
         *