]> git.sur5r.net Git - openocd/commitdiff
handle single threading
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 29 Sep 2009 14:24:02 +0000 (14:24 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Tue, 29 Sep 2009 14:24:02 +0000 (14:24 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@2771 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/server/httpd.c

index 4705e4426c0c17aa4711de79fd37af41d1b3dd7a..0ddeb97acc67b9cd7cd9718196be5c633bc0439e 100644 (file)
 
 #define PAGE_NOT_FOUND "<html><head><title > File not found</title></head><body > File not found</body></html>"
 
+static pthread_mutex_t mutex;
+
+void openocd_sleep_prelude(void)
+{
+       pthread_mutex_unlock(&mutex);
+}
+
+void openocd_sleep_postlude(void)
+{
+       pthread_mutex_lock(&mutex);
+}
+
+
+
 int loadFile(const char *name, void **data, size_t *len);
 
 static const char *appendf(const char *prev, const char *format, ...)
@@ -184,7 +198,9 @@ static void request_completed(void *cls, struct MHD_Connection *connection,
 
        if (r->postprocessor)
        {
+               openocd_sleep_postlude();
                MHD_destroy_post_processor(r->postprocessor);
+               openocd_sleep_prelude();
        }
 
        free(r);
@@ -257,7 +273,7 @@ static int record_arg(void *cls, enum MHD_ValueKind kind, const char *key,
 }
 
 
-int handle_request(struct MHD_Connection * connection, const char * url)
+static int handle_request(struct MHD_Connection * connection, const char * url)
 {
        struct MHD_Response * response;
 
@@ -335,7 +351,7 @@ int handle_request(struct MHD_Connection * connection, const char * url)
        }
 }
 
-static int ahc_echo(void * cls, struct MHD_Connection * connection,
+static int ahc_echo_inner(void * cls, struct MHD_Connection * connection,
                const char * url, const char * method, const char * version,
                const char * upload_data, unsigned int * upload_data_size, void ** ptr)
 {
@@ -423,9 +439,23 @@ static int ahc_echo(void * cls, struct MHD_Connection * connection,
        return result;
 }
 
-static struct MHD_Daemon * d;
-static pthread_mutex_t mutex;
 
+static int ahc_echo(void * cls, struct MHD_Connection * connection,
+               const char * url, const char * method, const char * version,
+               const char * upload_data, unsigned int * upload_data_size, void ** ptr)
+{
+       int result;
+
+       openocd_sleep_postlude();
+
+       result = ahc_echo_inner(cls, connection, url, method, version, upload_data, upload_data_size, ptr);
+
+       openocd_sleep_prelude();
+
+       return result;
+}
+
+static struct MHD_Daemon * d;
 
 int httpd_start(void)
 {
@@ -464,13 +494,3 @@ void httpd_stop(void)
        pthread_mutex_destroy(&mutex);
 }
 
-void openocd_sleep_prelude(void)
-{
-       pthread_mutex_unlock(&mutex);
-}
-
-void openocd_sleep_postlude(void)
-{
-       pthread_mutex_lock(&mutex);
-}
-