[Groonga-commit] groonga/groonga [master] Fix query logger API

アーカイブの一覧に戻る

Kouhei Sutou null+****@clear*****
Thu Dec 20 14:01:19 JST 2012


Kouhei Sutou	2012-12-20 14:01:19 +0900 (Thu, 20 Dec 2012)

  New Revision: 2fe475ee2db4278e722069a5a13f2b8350c977a6
  https://github.com/groonga/groonga/commit/2fe475ee2db4278e722069a5a13f2b8350c977a6

  Log:
    Fix query logger API
    
    The previous API isn't usable... Sorry...

  Modified files:
    include/groonga.h
    lib/ctx.c

  Modified: include/groonga.h (+4 -4)
===================================================================
--- include/groonga.h    2012-12-20 13:06:37 +0900 (e8b657a)
+++ include/groonga.h    2012-12-20 14:01:19 +0900 (dfdeba0)
@@ -2083,12 +2083,12 @@ typedef struct _grn_query_logger_info grn_query_logger_info;
 
 struct _grn_query_logger_info {
   unsigned int flags;
-  grn_user_data *user_data;
+  void *user_data;
   void (*log)(grn_ctx *ctx, unsigned int flag,
               const char *timestamp, const char *info, const char *message,
-              grn_user_data *user_data);
-  void (*reopen)(grn_ctx *ctx, grn_user_data *user_data);
-  void (*fin)(grn_ctx *ctx, grn_user_data *user_data);
+              void *user_data);
+  void (*reopen)(grn_ctx *ctx, void *user_data);
+  void (*fin)(grn_ctx *ctx, void *user_data);
 };
 
 GRN_API grn_rc grn_query_logger_info_set(grn_ctx *ctx, const grn_query_logger_info *info);

  Modified: lib/ctx.c (+30 -20)
===================================================================
--- lib/ctx.c    2012-12-20 13:06:37 +0900 (06322fa)
+++ lib/ctx.c    2012-12-20 14:01:19 +0900 (6f7fd2b)
@@ -737,7 +737,7 @@ static grn_critical_section grn_query_logger_lock;
 static void
 default_query_logger_log(grn_ctx *ctx, unsigned int flag,
                          const char *timestamp, const char *info,
-                         const char *message, grn_user_data *user_data)
+                         const char *message, void *user_data)
 {
   if (grn_qlog_path) {
     CRITICAL_SECTION_ENTER(grn_query_logger_lock);
@@ -753,7 +753,7 @@ default_query_logger_log(grn_ctx *ctx, unsigned int flag,
 }
 
 static void
-default_query_logger_close(grn_ctx *ctx, grn_user_data *user_data)
+default_query_logger_close(grn_ctx *ctx, void *user_data)
 {
   GRN_QUERY_LOG(ctx, GRN_QUERY_LOG_DESTINATION, " ",
                 "query log will be closed: <%s>", grn_qlog_path);
@@ -766,7 +766,7 @@ default_query_logger_close(grn_ctx *ctx, grn_user_data *user_data)
 }
 
 static void
-default_query_logger_reopen(grn_ctx *ctx, grn_user_data *user_data)
+default_query_logger_reopen(grn_ctx *ctx, void *user_data)
 {
   if (grn_qlog_path) {
     default_query_logger_close(ctx, user_data);
@@ -776,7 +776,7 @@ default_query_logger_reopen(grn_ctx *ctx, grn_user_data *user_data)
 }
 
 static void
-default_query_logger_fin(grn_ctx *ctx, grn_user_data *user_data)
+default_query_logger_fin(grn_ctx *ctx, void *user_data)
 {
   if (default_query_logger_file) {
     default_query_logger_close(ctx, user_data);
@@ -791,12 +791,21 @@ static grn_query_logger_info default_query_logger = {
   default_query_logger_fin
 };
 
-static const grn_query_logger_info *grn_query_logger = &default_query_logger;
+static grn_query_logger_info grn_query_logger = {
+  GRN_QUERY_LOG_DEFAULT,
+  NULL,
+  NULL,
+  NULL,
+  NULL
+};
 
 void
 grn_default_query_logger_set_flags(unsigned int flags)
 {
   default_query_logger.flags = flags;
+  if (grn_query_logger.log == default_query_logger_log) {
+    grn_query_logger.flags = flags;
+  }
 }
 
 unsigned int
@@ -830,8 +839,8 @@ grn_log_reopen(grn_ctx *ctx)
 void
 grn_query_logger_reopen(grn_ctx *ctx)
 {
-  if (grn_query_logger->reopen) {
-    grn_query_logger->reopen(ctx, grn_query_logger->user_data);
+  if (grn_query_logger.reopen) {
+    grn_query_logger.reopen(ctx, grn_query_logger.user_data);
   }
 }
 
@@ -871,7 +880,8 @@ grn_init(void)
   grn_rc rc;
   grn_ctx *ctx = &grn_gctx;
   grn_logger = &default_logger;
-  grn_query_logger = &default_query_logger;
+  memcpy(&grn_query_logger, &default_query_logger,
+         sizeof(grn_query_logger_info));
   CRITICAL_SECTION_INIT(grn_glock);
   CRITICAL_SECTION_INIT(grn_logger_lock);
   CRITICAL_SECTION_INIT(grn_query_logger_lock);
@@ -2472,18 +2482,19 @@ grn_logger_put(grn_ctx *ctx, grn_log_level level,
 void
 grn_query_logger_fin(grn_ctx *ctx)
 {
-  if (grn_query_logger->fin) {
-    grn_query_logger->fin(ctx, grn_query_logger->user_data);
+  if (grn_query_logger.fin) {
+    grn_query_logger.fin(ctx, grn_query_logger.user_data);
   }
 }
 
 grn_rc
 grn_query_logger_info_set(grn_ctx *ctx, const grn_query_logger_info *info)
 {
+  grn_query_logger_fin(ctx);
   if (info) {
-    grn_query_logger = info;
+    grn_query_logger = *info;
   } else {
-    grn_query_logger = &default_query_logger;
+    grn_query_logger = default_query_logger;
   }
   return GRN_SUCCESS;
 }
@@ -2491,7 +2502,7 @@ grn_query_logger_info_set(grn_ctx *ctx, const grn_query_logger_info *info)
 grn_bool
 grn_query_logger_pass(grn_ctx *ctx, unsigned int flag)
 {
-  return grn_query_logger->flags & flag;
+  return grn_query_logger.flags & flag;
 }
 
 #define TIMESTAMP_BUFFER_SIZE    TBUFSIZE
@@ -2507,6 +2518,10 @@ grn_query_logger_put(grn_ctx *ctx, unsigned int flag, const char *mark,
   char info[INFO_BUFFER_SIZE];
   char message[MESSAGE_BUFFER_SIZE];
 
+  if (!grn_query_logger.log) {
+    return;
+  }
+
   {
     grn_timeval tv;
     timestamp[0] = '\0';
@@ -2538,13 +2553,8 @@ grn_query_logger_put(grn_ctx *ctx, unsigned int flag, const char *mark,
     message[MESSAGE_BUFFER_SIZE - 1] = '\0';
   }
 
-  if (grn_query_logger->log) {
-    grn_query_logger->log(ctx, flag, timestamp, info, message,
-                          grn_query_logger->user_data);
-  } else {
-    default_query_logger_log(ctx, flag, timestamp, info, message,
-                             grn_query_logger->user_data);
-  }
+  grn_query_logger.log(ctx, flag, timestamp, info, message,
+                       grn_query_logger.user_data);
 }
 
 void
-------------- next part --------------
HTML����������������������������...
ダウンロード 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る