Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8052634
  • 博文数量: 594
  • 博客积分: 13065
  • 博客等级: 上将
  • 技术积分: 10324
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-26 16:44
个人简介

推荐: blog.csdn.net/aquester https://github.com/eyjian https://www.cnblogs.com/aquester http://blog.chinaunix.net/uid/20682147.html

文章分类

全部博文(594)

分类: C/C++

2012-12-24 17:33:37

注:最近代码已修复此bug

问题原因非常简单,utilities.cc文件中的ShutdownGoogleLoggingUtilities未对全局静态变量g_program_invocation_short_name重置为NULL,下面是相关的源代码,一看便知,解决办法就是加上:g_program_invocation_short_name = NULL;一句,由于是静态的全局变量,不能在自己程序中执行这个操作,除非改成非static全局变量。

源码文件logging.cc
1803 void InitGoogleLogging(const char* argv0) {
1804   glog_internal_namespace_::InitGoogleLoggingUtilities(argv0);
1805 }
1806 
1807 void ShutdownGoogleLogging() {
1808   glog_internal_namespace_::ShutdownGoogleLoggingUtilities();
1809   LogDestination::DeleteLogDestinations();
1810   delete logging_directories_list;
1811   logging_directories_list = NULL;
1812 }

源码文件src/utilities.cc
57 static const char* g_program_invocation_short_name = NULL;

167 bool IsGoogleLoggingInitialized() {
168   return g_program_invocation_short_name != NULL;
169 }

316 void InitGoogleLoggingUtilities(const char* argv0) {
317   CHECK(!IsGoogleLoggingInitialized())
318       << "You called InitGoogleLogging() twice!";
319   const char* slash = strrchr(argv0, '/');
320 #ifdef OS_WINDOWS
321   if (!slash)  slash = strrchr(argv0, '\\');
322 #endif
323   g_program_invocation_short_name = slash ? slash + 1 : argv0;
324   g_main_thread_id = pthread_self();
325 
326 #ifdef HAVE_STACKTRACE
327   InstallFailureFunction(&DumpStackTraceAndExit);
328 #endif
329 }
330 
331 void ShutdownGoogleLoggingUtilities() {
332   CHECK(IsGoogleLoggingInitialized())
333       << "You called ShutdownGoogleLogging() without calling InitGoogleLogging() first!";
334 #ifdef HAVE_SYSLOG_H
335   closelog();
336 #endif
      g_program_invocation_short_name = NULL;
337 }

阅读(11921) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~