Bläddra i källkod

Optimize code

ithewei 4 år sedan
förälder
incheckning
8712451104
8 ändrade filer med 38 tillägg och 33 borttagningar
  1. 9 1
      base/hlog.c
  2. 3 0
      base/hlog.h
  3. 2 2
      base/hmain.c
  4. 3 3
      base/hplatform.h
  5. 12 15
      http/Http1Parser.cpp
  6. 2 2
      http/Http1Parser.h
  7. 6 9
      http/WebSocketParser.cpp
  8. 1 1
      http/WebSocketParser.h

+ 9 - 1
base/hlog.c

@@ -348,13 +348,21 @@ int logger_print(logger_t* logger, int level, const char* fmt, ...) {
     return len;
 }
 
+static logger_t* s_logger = NULL;
 logger_t* hv_default_logger() {
-    static logger_t* s_logger = NULL;
     if (s_logger == NULL) {
         s_logger = logger_create();
+        atexit(hv_destroy_default_logger);
     }
     return s_logger;
 }
+void hv_destroy_default_logger() {
+    if (s_logger) {
+        logger_fsync(s_logger);
+        logger_destroy(s_logger);
+        s_logger = NULL;
+    }
+}
 
 void stdout_logger(int loglevel, const char* buf, int len) {
     fprintf(stdout, "%.*s", len, buf);

+ 3 - 0
base/hlog.h

@@ -101,9 +101,12 @@ HV_EXPORT const char* logger_get_cur_file(logger_t* logger);
 
 // hlog: default logger instance
 HV_EXPORT logger_t* hv_default_logger();
+HV_EXPORT void      hv_destroy_default_logger();
 
 // macro hlog*
 #define hlog                            hv_default_logger()
+#define hlog_destory()                  hv_destroy_default_logger()
+#define hlog_disable()                  logger_set_level(hlog, LOG_LEVEL_SILENT)
 #define hlog_set_file(filepath)         logger_set_file(hlog, filepath)
 #define hlog_set_level(level)           logger_set_level(hlog, level)
 #define hlog_set_level_by_str(level)    logger_set_level_by_str(hlog, level)

+ 2 - 2
base/hmain.c

@@ -456,7 +456,7 @@ int signal_init(procedure_t reload_fn, void* reload_userdata) {
 //static HANDLE s_hEventTerm = NULL;
 static HANDLE s_hEventReload = NULL;
 
-void WINAPI on_timer(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) {
+static void WINAPI on_timer(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) {
     DWORD ret;
     /*
     ret = WaitForSingleObject(s_hEventTerm, 0);
@@ -478,7 +478,7 @@ void WINAPI on_timer(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1,
     }
 }
 
-void signal_cleanup() {
+static void signal_cleanup() {
     //CloseHandle(s_hEventTerm);
     //s_hEventTerm = NULL;
     CloseHandle(s_hEventReload);

+ 3 - 3
base/hplatform.h

@@ -34,7 +34,7 @@
 #elif defined(sun) || defined(__sun) || defined(__sun__)
     #define OS_SOLARIS
 #else
-    #error "Unsupported operating system platform!"
+    #warning "Untested operating system platform!"
 #endif
 
 #if defined(OS_WIN32) || defined(OS_WIN64)
@@ -56,8 +56,7 @@
 #elif defined(__aarch64__) || defined(__ARM64__)
     #define ARCH_ARM64
 #else
-    #define ARCH_UNKNOWN
-    #warning "Unknown hardware architecture!"
+    #warning "Untested hardware architecture!"
 #endif
 
 // COMPILER
@@ -108,6 +107,7 @@
 
 #pragma warning (disable: 4018) // signed/unsigned comparison
 #pragma warning (disable: 4100) // unused param
+#pragma warning (disable: 4102) // unreferenced label
 #pragma warning (disable: 4244) // conversion loss of data
 #pragma warning (disable: 4251) // STL dll
 #pragma warning (disable: 4267) // size_t => int

+ 12 - 15
http/Http1Parser.cpp

@@ -13,23 +13,20 @@ static int on_message_complete(http_parser* parser);
 static int on_chunk_header(http_parser* parser);
 static int on_chunk_complete(http_parser* parser);
 
-http_parser_settings* Http1Parser::cbs = NULL;
+http_parser_settings Http1Parser::cbs = {
+    on_message_begin,
+    on_url,
+    on_status,
+    on_header_field,
+    on_header_value,
+    on_headers_complete,
+    on_body,
+    on_message_complete,
+    on_chunk_header,
+    on_chunk_complete
+};
 
 Http1Parser::Http1Parser(http_session_type type) {
-    if (cbs == NULL) {
-        cbs = (http_parser_settings*)malloc(sizeof(http_parser_settings));
-        http_parser_settings_init(cbs);
-        cbs->on_message_begin    = on_message_begin;
-        cbs->on_url              = on_url;
-        cbs->on_status           = on_status;
-        cbs->on_header_field     = on_header_field;
-        cbs->on_header_value     = on_header_value;
-        cbs->on_headers_complete = on_headers_complete;
-        cbs->on_body             = on_body;
-        cbs->on_message_complete = on_message_complete;
-        cbs->on_chunk_header     = on_chunk_header;
-        cbs->on_chunk_complete   = on_chunk_complete;
-    }
     http_parser_init(&parser, HTTP_BOTH);
     parser.data = this;
     flags = 0;

+ 2 - 2
http/Http1Parser.h

@@ -20,7 +20,7 @@ enum http_parser_state {
 
 class Http1Parser : public HttpParser {
 public:
-    static http_parser_settings*    cbs;
+    static http_parser_settings     cbs;
     http_parser                     parser;
     int                             flags;
     http_parser_state               state;
@@ -64,7 +64,7 @@ public:
     }
 
     virtual int FeedRecvData(const char* data, size_t len) {
-        return http_parser_execute(&parser, cbs, data, len);
+        return http_parser_execute(&parser, &cbs, data, len);
     }
 
     virtual int  GetState() {

+ 6 - 9
http/WebSocketParser.cpp

@@ -49,16 +49,13 @@ static int on_frame_end(websocket_parser* parser) {
     return 0;
 }
 
-websocket_parser_settings* WebSocketParser::cbs = NULL;
+websocket_parser_settings WebSocketParser::cbs = {
+    on_frame_header,
+    on_frame_body,
+    on_frame_end
+};
 
 WebSocketParser::WebSocketParser() {
-    if (cbs == NULL) {
-        cbs = (websocket_parser_settings*)malloc(sizeof(websocket_parser_settings));
-        websocket_parser_settings_init(cbs);
-        cbs->on_frame_header = on_frame_header;
-        cbs->on_frame_body = on_frame_body;
-        cbs->on_frame_end = on_frame_end;
-    }
     parser = (websocket_parser*)malloc(sizeof(websocket_parser));
     websocket_parser_init(parser);
     parser->data = this;
@@ -73,5 +70,5 @@ WebSocketParser::~WebSocketParser() {
 }
 
 int WebSocketParser::FeedRecvData(const char* data, size_t len) {
-    return websocket_parser_execute(parser, cbs, data, len);
+    return websocket_parser_execute(parser, &cbs, data, len);
 }

+ 1 - 1
http/WebSocketParser.h

@@ -19,7 +19,7 @@ struct websocket_parser_settings;
 struct websocket_parser;
 class HV_EXPORT WebSocketParser {
 public:
-    static websocket_parser_settings*   cbs;
+    static websocket_parser_settings    cbs;
     websocket_parser*                   parser;
     websocket_parser_state              state;
     int                                 opcode;