Home > Archives > 2009-05
2009-05
gflags + glogでdeadlock? (2)
- 2009-05-13 (Wed)
- Google OSS

どうもgflagsからglogのMutexが呼ばれるのは何かおかしいと思っていたのだが、readelfで確認したところ、シンボルが競合しているようだ。
ソースコードからは競合しても問題無いようにコーディングしたいという意図が見えるが、glogからgflagsのMutexを使用しても問題が起こらないが、gflagsからglogのMutexを使用した場合に問題が起こるようだ。
id:nobu-q先生による解決策はこうですが、adhoc臭が漂いまくり(笑)
--- glog-0.2.1-orig/src/base/mutex.h 2009-01-22 07:17:01.000000000 +0900
+++ glog-0.2.1/src/base/mutex.h 2009-05-13 21:34:36.000000000 +0900
@@ -99,6 +99,8 @@
# error Need to implement mutex.h for your architecture, or #define NO_THREADS
#endif
+namespace hoge {
+
class Mutex {
public:
// Create a Mutex that is not held by anybody. This constructor is
@@ -246,9 +248,13 @@
void operator=(const WriterMutexLock&);
};
+};
+using namespace hoge;
でも本質的に解決するためには名前空間作るしか無いと思うのですがいかがでしょう? > shinhせんせい
googleのコードは必ず名前空間を作る雰囲気がしてたんですが、Mutexだけそうなってるのは歴史的事情かなんかなのかな。usingが禁止されてて面倒くさいのとstatic linkを使用しているので、よく使うものだけは例外的にglobalに有ったりするんだろうか。
- Comments: 0
- Trackbacks: 0
gflags + glogでdeadlock?
- 2009-05-13 (Wed)
- Google OSS

gflagsとglogの組み合わせだと、初期化時にデッドロックするケースが有る模様 @ RHEL5。ソースコードは以下のような感じ。
#include <glog/logging.h>
#include <google/gflags.h>
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
google::InitGoogleLogging(argv[0]);
google::InstallFailureSignalHandler();
google::ParseCommandLineFlags(&argc, &argv, true);
cout << "hogehoge" << endl;
}
リンクの順番によって、デッドロックしたりしなかったり。
$ g++ test.cpp -lgflags -lglog; ./a.out hogehoge $ g++ test.cpp -lglog -lgflags; ./a.out ^C # deadlock occurs
gdbするとこんな感じ。
(gdb) bt #0 0x007c8402 in __kernel_vsyscall () #1 0x00787ceb in pthread_rwlock_wrlock () from /lib/libpthread.so.0 #2 0x00aaed87 in Mutex::Lock () from /opt/sedue/lib/libglog.so.0 #3 0x00aaedc3 in MutexLock::MutexLock () from /opt/sedue/lib/libglog.so.0 #4 0x00bb9034 in google::(anonymous namespace)::FlagRegistry::GlobalRegistry () from /opt/sedue/lib/libgflags.so.0 #5 0x00bbff49 in google::ParseCommandLineFlagsInternal () from /opt/sedue/lib/libgflags.so.0 #6 0x00bc0196 in google::ParseCommandLineFlags () from /opt/sedue/lib/libgflags.so.0 #7 0x080488a3 in main ()
-g付き。
(gdb) bt #0 0x003fe402 in __kernel_vsyscall () #1 0x002d4ceb in pthread_rwlock_wrlock () from /lib/libpthread.so.0 #2 0x00ca0d87 in Mutex::Lock (this=0x44e904) at src/base/mutex.h:171 #3 0x00ca0dc3 in MutexLock (this=0xbfa390cc, mu=0x44e904) at src/base/mutex.h:217 #4 0x00435034 in GlobalRegistry () at src/gflags.cc:675 #5 0x0043bf49 in ParseCommandLineFlagsInternal (argc=0xbfa391d4, argv=0xbfa391d0, remove_flags=true, do_report=true) at src/gflags.cc:1825 #6 0x0043c196 in google::ParseCommandLineFlags (argc=0xbfa391d4, argv=0xbfa391d0, remove_flags=true) at src/gflags.cc:1855 #7 0x0804d9b3 in main (argc=1, argv=Cannot access memory at address 0x84 ) at hoge.cpp:111
初期化順序に問題が有る気がするんだけど、ちょっとソース見た感じでは分からなかったので、バグ報告的エントリ。
- Comments: 7
- Trackbacks: 0
n日前より古いファイルを消す
- 2009-05-12 (Tue)
- Unix

バックアップスクリプトを書く時にいつも忘れるのでメモ。
DATE=`date -d '7 days ago' +%y%m%d0000` echo $DATE echo >temp.file touch -t $DATE temp.file find . ! -newer temp.file -print | xargs rm -f rm temp.file
findコマンドの-newerを使用しています (お好みで-anewer, -cnewerなど)。
P.S.
chunさんよりzshのextended_globを覚えろとの指令が飛びました。
setopt extended_glob; ls *(^m-7) -ld
おー。
P.S.2
Higeponさんから以下のようなfindの使い方を教えて頂きました。find高機能すぎ。
find /tmp/ -name "sess_*" -mtime +7 -delete
- Comments: 0
- Trackbacks: 0
イーモバイルとニンテンドーWifi USBコネクタでWiiをネットに接続する方法
- 2009-05-07 (Thu)
- Uncategorized

僕は固定費削減のためにE-Mobile(イーモバイル D01NE)で全てのネット接続を行っています。家にネット回線を引いていません。
が、このたびWii, DSからもネットにつなぎたくなったので、Nintendo Wifi USB Connectorを買ってみました。これを使用すると、ネット回線に繋がったPCを使用してWii/DSをネットに接続する事が出来ます。
![]() アマゾン |
楽天 |
PCにはイーモバイルを指してインターネットに接続し、また同時にWifi USBコネクタを指すことで、Wii/DSがイーモバイルの回線を使用してインターネットに接続出来るようになります。以下の図で言うと、「インターネット接続環境」の部分にイーモバイルを使用します。

さらに詳しくは公式ホームページなどを参考にしてください。
手元のPCでは、使うのに少しはまったので手順をメモします。
- Comments: 0
- Trackbacks: 1
Home > Archives > 2009-05
-
- May 2010
- February 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- July 2006

