optimize extpoll fd delete
[profile/ivi/libwebsockets.git] / test-server / test-server-extpoll.c
index 470997c..5025f4d 100644 (file)
@@ -105,7 +105,8 @@ static int callback_http(struct libwebsocket_context * this,
                if (libwebsockets_serve_http_file(wsi,
                                  LOCAL_RESOURCE_PATH"/test.html", "text/html"))
                        fprintf(stderr, "Failed to send HTTP file\n");
-               break;
+               /* we are done with this connnection */
+               return 1;
 
        /*
         * callback for confirming to continue with client IP appear in
@@ -138,13 +139,18 @@ static int callback_http(struct libwebsocket_context * this,
                break;
 
        case LWS_CALLBACK_DEL_POLL_FD:
-               for (n = 0; n < count_pollfds; n++)
-                       if (pollfds[n].fd == (int)(long)user)
-                               while (n < count_pollfds) {
-                                       pollfds[n] = pollfds[n + 1];
-                                       n++;
-                               }
-               count_pollfds--;
+               for (n = 0; n < count_pollfds; n++) {
+                       if (pollfds[n].fd != (int)(long)user)
+                               continue;
+                       /*
+                        * swap the end guy into our vacant slot...
+                        * works ok if n is the end guy
+                        */
+                       pollfds[n] = pollfds[count_pollfds - 1];
+                       pollfds[count_pollfds - 1].fd = -1;
+                       count_pollfds--;
+                       break;
+               }
                break;
 
        case LWS_CALLBACK_SET_MODE_POLL_FD:
@@ -253,7 +259,7 @@ callback_dumb_increment(struct libwebsocket_context * this,
                n = sprintf((char *)p, "%d", pss->number++);
                n = libwebsocket_write(wsi, p, n, LWS_WRITE_TEXT);
                if (n < 0) {
-                       fprintf(stderr, "ERROR writing to socket");
+                       fprintf(stderr, "ERROR %d writing to socket\n", n);
                        return 1;
                }
                break;
@@ -331,7 +337,7 @@ callback_lws_mirror(struct libwebsocket_context * this,
                                                                LWS_WRITE_TEXT);
 
                        if (n < 0) {
-                               fprintf(stderr, "ERROR writing to socket");
+                               fprintf(stderr, "ERROR %d writing to socket\n", n);
                                exit(1);
                        }
 
@@ -460,7 +466,7 @@ int main(int argc, char **argv)
                        continue;
                switch (n) {
                case 'd':
-                       lws_set_log_level(atoi(optarg));
+                       lws_set_log_level(atoi(optarg), NULL);
                        break;
                case 's':
                        use_ssl = 1;