Improved the reliability of per-thread locale by unsetting it at the end
authorArt Cancro <ajc@citadel.org>
Thu, 8 Dec 2005 03:22:56 +0000 (03:22 +0000)
committerArt Cancro <ajc@citadel.org>
Thu, 8 Dec 2005 03:22:56 +0000 (03:22 +0000)
  of each transaction.

webcit/ChangeLog
webcit/context_loop.c
webcit/gettext.c
webcit/locate_host.c
webcit/webcit.c
webcit/webcit.h

index 7d4061a4261bdaacc2091ff882e6be1794d1147c..ed04cffeeeb69cb8726839498c148c50000829a8 100644 (file)
@@ -1,5 +1,9 @@
 $Id$
 
+Wed Dec  7 22:22:09 EST 2005 ajc
+* Improved the reliability of per-thread locale by unsetting it at the end
+  of each transaction.
+
 Wed Dec  7 17:57:57 EST 2005 ajc
 * Fixed more missing localization items
 
index b7fdf2a9ce467053ffa7170ec93caab0b9b65d64..bde5ff2a606b393567d38e600d1e5ca8c027411e 100644 (file)
@@ -434,7 +434,13 @@ void context_loop(int sock)
        TheSession->http_sock = sock;
        TheSession->lastreq = time(NULL);                       /* log */
        TheSession->gzip_ok = gzip_ok;
+#ifdef ENABLE_NLS
+       go_selected_language();                         /* set locale */
+#endif
        session_loop(req);                              /* do transaction */
+#ifdef ENABLE_NLS
+       stop_selected_language();                       /* unset locale */
+#endif
        pthread_mutex_unlock(&TheSession->SessionMutex);        /* unbind */
 
        /* Free the request buffer */
index 4d44e533a083d3b5148d88f6ddabbe1f4ba12d18..421e668d0b27467ba6d3ceba5cbc2d26db755b52 100644 (file)
@@ -34,8 +34,8 @@ void httplang_to_locale(const char *LocaleString)
        int nParts;
        const int nAvail = 1; /* Number of members in AvailLang */
        char *search = (char *) malloc(len);
-       locale_t my_Locale;
-       locale_t my_Empty_Locale;
+       // locale_t my_Locale;
+       // locale_t my_Empty_Locale;
 
        memcpy(search, LocaleString, len);
        search[len] = '\0';
@@ -98,14 +98,16 @@ void httplang_to_locale(const char *LocaleString)
        memcpy(search, locale, len);
        memcpy(&search[len], ".UTF8", 5);
        search[len + 5] = '\0';
-       my_Empty_Locale = newlocale(LC_ALL_MASK, NULL, NULL);   /* create default locale */
-       my_Locale = newlocale(LC_MESSAGES_MASK /*|LC_TIME_MASK FIXME */ ,
-                             search, my_Empty_Locale);
-
-       uselocale(my_Locale);
-       //      freelocale(my_Locale);
-       //      freelocale(my_Empty_Locale);
-       free(search);
+
+
+       //      my_Empty_Locale = newlocale(LC_ALL_MASK, NULL, NULL);   /* create default locale */
+       //      my_Locale = newlocale(LC_MESSAGES_MASK /*|LC_TIME_MASK FIXME */ ,
+       //                    search, my_Empty_Locale);
+
+       //      uselocale(my_Locale);
+       //      //      freelocale(my_Locale);
+       //      //      freelocale(my_Empty_Locale);
+       //      free(search);
 }
 
 
@@ -175,13 +177,16 @@ void set_selected_language(char *lang) {
 }
 
 /*
- * Activate the selected language for this session.
+ * Activate and deactivate the selected language for this session.
  */
 void go_selected_language(void) {
-       lprintf(9, "uselocale(%d)\n", WC->selected_language);
        uselocale(wc_locales[WC->selected_language]);
 }
 
+void stop_selected_language(void) {
+       uselocale(LC_GLOBAL_LOCALE);
+}
+
 
 /*
  * Create a locale_t for each available language
@@ -216,4 +221,7 @@ void set_selected_language(char *lang) {
 void go_selected_language(void) {
 }
 
+void stop_selected_language(void) {
+}
+
 #endif /* ENABLE_NLS */
index ba7026216393a772538d2361df8cbb7c1a50b32e..034fd05e9ef0c2bb4231a368cbcf265b81b64fb9 100644 (file)
@@ -11,7 +11,7 @@ void locate_host(char *tbuf, int client_socket)
 {
        struct sockaddr_in cs;
        struct hostent *ch;
-       int len;
+       socklen_t len;
        char *i;
        int a1, a2, a3, a4;
 
index 716275b3107e53f80c1a7a4b428785d1810946d6..d66f29e19dcd7c3b088dea782cebd1401f8859f9 100644 (file)
@@ -926,10 +926,6 @@ void session_loop(struct httprequest *req)
        WC->vars = NULL;
        WC->is_wap = 0;
 
-#ifdef ENABLE_NLS
-       go_selected_language();
-#endif /* ENABLE_NLS */
-
        hptr = req;
        if (hptr == NULL) return;
 
@@ -1532,5 +1528,4 @@ SKIP_ALL_THIS_CRAP:
                free(WC->upload);
                WC->upload_length = 0;
        }
-
 }
index acc399d9f80081d2b326ea9b73ea04cac4d0128e..1a66c76c1126e40d0a81de034a852b9b768a3aa3 100644 (file)
@@ -656,6 +656,7 @@ void set_floordiv_expanded(char *which_floordiv);
 void offer_languages(void);
 void set_selected_language(char *);
 void go_selected_language(void);
+void stop_selected_language(void);
 
 void embed_room_banner(char *, int);
 /* navbar types that can be passed to embed_room_banner */