summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2009-06-08 14:15:15 -0400
committerEliot Horowitz <eliot@10gen.com>2009-06-08 14:15:15 -0400
commit905f018510bd388c0f101d23806b974dd0faea52 (patch)
tree459a7c9000a2747182ef491f9b2a376621155e8d
parentab05b87e83c2ca7eaf0c8a79a82e2c9d3499a17e (diff)
parent6d446d4e6d7ad66d644901b488558f7b2a70d924 (diff)
downloadmongo-905f018510bd388c0f101d23806b974dd0faea52.tar.gz
Merge commit 'alanw/master'
Conflicts: db/db.cpp msvc/server_only/server_only.vcproj stdafx.cpp util/log.h
-rw-r--r--SConstruct2
-rw-r--r--msvc/core_server/core_server.vcproj28
-rw-r--r--msvc/mongo/mongo.vcproj28
-rw-r--r--msvc/mongo_common/mongo_common.vcproj20
-rw-r--r--msvc/mongobridge/mongobridge.vcproj28
-rw-r--r--msvc/mongoclient/mongoclient.vcproj28
-rw-r--r--msvc/mongod/mongod.vcproj28
-rw-r--r--msvc/mongodump/mongodump.vcproj28
-rw-r--r--msvc/mongoexport/mongoexport.vcproj28
-rw-r--r--msvc/mongofiles/mongofiles.vcproj28
-rw-r--r--msvc/mongoimportjson/mongoimportjson.vcproj28
-rw-r--r--msvc/mongorestore/mongorestore.vcproj28
-rw-r--r--msvc/mongos/mongos.vcproj28
-rw-r--r--msvc/shard_server/shard_server.vcproj28
-rw-r--r--stdafx.cpp117
-rw-r--r--stdafx.h328
-rw-r--r--util/allocator.h52
-rw-r--r--util/assert_util.cpp81
-rw-r--r--util/assert_util.h169
-rw-r--r--util/debug_util.h66
-rw-r--r--util/goodies.h9
-rw-r--r--util/log.h1
-rw-r--r--util/util.cpp43
23 files changed, 792 insertions, 432 deletions
diff --git a/SConstruct b/SConstruct
index 9a90c10e75d..8a4c93a9142 100644
--- a/SConstruct
+++ b/SConstruct
@@ -185,7 +185,7 @@ if ( not ( usesm or usejvm ) ):
# ------ SOURCE FILE SETUP -----------
commonFiles = Split( "stdafx.cpp buildinfo.cpp db/jsobj.cpp db/json.cpp db/commands.cpp db/lasterror.cpp db/nonce.cpp db/queryutil.cpp shell/mongo.cpp" )
-commonFiles += [ "util/background.cpp" , "util/mmap.cpp" , "util/sock.cpp" , "util/util.cpp" , "util/message.cpp" ]
+commonFiles += [ "util/background.cpp" , "util/mmap.cpp" , "util/sock.cpp" , "util/util.cpp" , "util/message.cpp" , "util/assert_util.cpp" ]
commonFiles += Glob( "util/*.c" )
commonFiles += Split( "client/connpool.cpp client/dbclient.cpp client/model.cpp" )
commonFiles += [ "scripting/engine.cpp" ]
diff --git a/msvc/core_server/core_server.vcproj b/msvc/core_server/core_server.vcproj
index 6ac3aa669e6..5def1339cfc 100644
--- a/msvc/core_server/core_server.vcproj
+++ b/msvc/core_server/core_server.vcproj
@@ -47,7 +47,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -113,7 +113,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -210,6 +210,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/mongo/mongo.vcproj b/msvc/mongo/mongo.vcproj
index 1b96fd17a2d..1dd951d27d8 100644
--- a/msvc/mongo/mongo.vcproj
+++ b/msvc/mongo/mongo.vcproj
@@ -47,7 +47,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -125,7 +125,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -282,6 +282,30 @@
</FileConfiguration>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/mongo_common/mongo_common.vcproj b/msvc/mongo_common/mongo_common.vcproj
index 7883419cde5..e1077239a0d 100644
--- a/msvc/mongo_common/mongo_common.vcproj
+++ b/msvc/mongo_common/mongo_common.vcproj
@@ -790,6 +790,18 @@
Name="util"
>
<File
+ RelativePath="..\..\util\allocator.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\util\assert_util.cpp"
+ >
+ </File>
+ <File
+ RelativePath="..\..\util\assert_util.h"
+ >
+ </File>
+ <File
RelativePath="..\..\util\background.cpp"
>
</File>
@@ -798,6 +810,14 @@
>
</File>
<File
+ RelativePath="..\..\util\debug_util.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\util\goodies.h"
+ >
+ </File>
+ <File
RelativePath="..\..\util\md5.c"
>
<FileConfiguration
diff --git a/msvc/mongobridge/mongobridge.vcproj b/msvc/mongobridge/mongobridge.vcproj
index 1b2115c7ae0..250f5693d62 100644
--- a/msvc/mongobridge/mongobridge.vcproj
+++ b/msvc/mongobridge/mongobridge.vcproj
@@ -47,7 +47,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -125,7 +125,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -266,6 +266,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/mongoclient/mongoclient.vcproj b/msvc/mongoclient/mongoclient.vcproj
index f3b3faea1b7..ad2703cc380 100644
--- a/msvc/mongoclient/mongoclient.vcproj
+++ b/msvc/mongoclient/mongoclient.vcproj
@@ -46,7 +46,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -111,7 +111,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -210,6 +210,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/mongod/mongod.vcproj b/msvc/mongod/mongod.vcproj
index 7bc0f21e854..4ff3db088e7 100644
--- a/msvc/mongod/mongod.vcproj
+++ b/msvc/mongod/mongod.vcproj
@@ -47,7 +47,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -127,7 +127,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -202,6 +202,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/mongodump/mongodump.vcproj b/msvc/mongodump/mongodump.vcproj
index 8b3408a3778..7d331b055e6 100644
--- a/msvc/mongodump/mongodump.vcproj
+++ b/msvc/mongodump/mongodump.vcproj
@@ -47,7 +47,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -125,7 +125,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -266,6 +266,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/mongoexport/mongoexport.vcproj b/msvc/mongoexport/mongoexport.vcproj
index 375e45d32e3..0225031205e 100644
--- a/msvc/mongoexport/mongoexport.vcproj
+++ b/msvc/mongoexport/mongoexport.vcproj
@@ -47,7 +47,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -125,7 +125,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -266,6 +266,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/mongofiles/mongofiles.vcproj b/msvc/mongofiles/mongofiles.vcproj
index 604075b3b18..a36f4421067 100644
--- a/msvc/mongofiles/mongofiles.vcproj
+++ b/msvc/mongofiles/mongofiles.vcproj
@@ -47,7 +47,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -125,7 +125,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -266,6 +266,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/mongoimportjson/mongoimportjson.vcproj b/msvc/mongoimportjson/mongoimportjson.vcproj
index 1c292477a10..f2b2f7f8b0f 100644
--- a/msvc/mongoimportjson/mongoimportjson.vcproj
+++ b/msvc/mongoimportjson/mongoimportjson.vcproj
@@ -47,7 +47,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -125,7 +125,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -266,6 +266,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/mongorestore/mongorestore.vcproj b/msvc/mongorestore/mongorestore.vcproj
index 54117b10fc2..e40ea927e93 100644
--- a/msvc/mongorestore/mongorestore.vcproj
+++ b/msvc/mongorestore/mongorestore.vcproj
@@ -47,7 +47,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -125,7 +125,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -266,6 +266,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/mongos/mongos.vcproj b/msvc/mongos/mongos.vcproj
index 0ad3ca05699..058fa1ee375 100644
--- a/msvc/mongos/mongos.vcproj
+++ b/msvc/mongos/mongos.vcproj
@@ -46,7 +46,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -122,7 +122,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -198,6 +198,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/msvc/shard_server/shard_server.vcproj b/msvc/shard_server/shard_server.vcproj
index 1335b321d5f..e2089033b74 100644
--- a/msvc/shard_server/shard_server.vcproj
+++ b/msvc/shard_server/shard_server.vcproj
@@ -47,7 +47,7 @@
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="4"
/>
@@ -113,7 +113,7 @@
PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="0"
+ UsePrecompiledHeader="2"
WarningLevel="3"
DebugInformationFormat="3"
/>
@@ -232,6 +232,30 @@
>
</File>
</Filter>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>
diff --git a/stdafx.cpp b/stdafx.cpp
index 0be244591c7..60255274d9c 100644
--- a/stdafx.cpp
+++ b/stdafx.cpp
@@ -1,6 +1,4 @@
// stdafx.cpp : source file that includes just the standard includes
-// db.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
/**
* Copyright (C) 2008 10gen Inc.
@@ -24,119 +22,4 @@ namespace mongo {
const char versionString[] = "0.9.3+";
-// TODO: reference any additional headers you need in STDAFX.H
-// and not in this file
-
- Assertion lastAssert[4];
-
-#undef assert
-
-#undef yassert
-
-} // namespace mongo
-
-#include "assert.h"
-#include "db/lasterror.h"
-
-namespace mongo {
-
- string getDbContext();
-
- /* "warning" assert -- safe to continue, so we don't throw exception. */
- void wasserted(const char *msg, const char *file, unsigned line) {
- problem() << "Assertion failure " << msg << ' ' << file << ' ' << dec << line << endl;
- sayDbContext();
- raiseError(msg && *msg ? msg : "wassertion failure");
- lastAssert[1].set(msg, getDbContext().c_str(), file, line);
- }
-
- void asserted(const char *msg, const char *file, unsigned line) {
- problem() << "Assertion failure " << msg << ' ' << file << ' ' << dec << line << endl;
- sayDbContext();
- raiseError(msg && *msg ? msg : "assertion failure");
- lastAssert[0].set(msg, getDbContext().c_str(), file, line);
- throw AssertionException();
- }
-
- void uassert_nothrow(const char *msg) {
- lastAssert[3].set(msg, getDbContext().c_str(), "", 0);
- raiseError(msg);
- }
-
- int uacount = 0;
- void uasserted(const char *msg) {
- if ( ++uacount < 100 )
- log() << "User Exception " << msg << endl;
- else
- RARELY log() << "User Exception " << msg << endl;
- lastAssert[3].set(msg, getDbContext().c_str(), "", 0);
- raiseError(msg);
- throw UserException(msg);
- }
-
- void msgasserted(const char *msg) {
- log() << "Assertion: " << msg << '\n';
- lastAssert[2].set(msg, getDbContext().c_str(), "", 0);
- raiseError(msg && *msg ? msg : "massert failure");
- throw MsgAssertionException(msg);
- }
-
- string Assertion::toString() {
- if ( !isSet() )
- return "";
-
- stringstream ss;
- ss << msg << '\n';
- if ( *context )
- ss << context << '\n';
- if ( *file )
- ss << file << ' ' << line << '\n';
- return ss.str();
- }
-
- /* this is a good place to set a breakpoint when debugging, as lots of warning things
- (assert, wassert) call it.
- */
- void sayDbContext(const char *errmsg) {
- if ( errmsg ) {
- problem() << errmsg << endl;
- }
- printStackTrace();
- }
-
- void exit( int status ){
- dbexit( status );
- }
-
- void rawOut( const string &s ) {
- if( s.empty() ) return;
- char now[64];
- time_t_to_String(time(0), now);
- now[20] = 0;
-#if defined(_WIN32)
- (std::cout << now << " " << s).flush();
-#else
- write( STDOUT_FILENO, now, 20 );
- write( STDOUT_FILENO, " ", 1 );
- write( STDOUT_FILENO, s.c_str(), s.length() );
- fsync( STDOUT_FILENO );
-#endif
- }
-
-#ifndef _SCONS
- // only works in scons
- const char * gitVersion(){ return ""; }
- const char * sysInfo(){ return ""; }
-#endif
-
- void printGitVersion() { log() << "git version: " << gitVersion() << endl; }
- void printSysInfo() {
- log() << "sys info: " << sysInfo() << endl;
- }
- string mongodVersion() {
- stringstream ss;
- ss << "db version v" << versionString << ", pdfile version " << VERSION << "." << VERSION_MINOR;
- return ss.str();
- }
-
} // namespace mongo
diff --git a/stdafx.h b/stdafx.h
index 026d0b9fa11..d259f0f5907 100644
--- a/stdafx.h
+++ b/stdafx.h
@@ -31,301 +31,33 @@ namespace mongo {
const bool debug=false;
#endif
- extern const char versionString[];
// pdfile versions
const int VERSION = 4;
const int VERSION_MINOR = 4;
-} // namespace mongo
-
-#include <memory>
-#include "stdlib.h"
-#include "string.h"
-#include "limits.h"
-
-namespace mongo {
-
- void sayDbContext(const char *msg = 0);
- void dbexit(int returnCode, const char *whyMsg = "");
- void exit( int status );
+ // mongo version
+ extern const char versionString[];
- inline void * ourmalloc(size_t size) {
- void *x = malloc(size);
- if ( x == 0 ) dbexit(42, "malloc fails");
- return x;
- }
-
- inline void * ourrealloc(void *ptr, size_t size) {
- void *x = realloc(ptr, size);
- if ( x == 0 ) dbexit(43, "realloc fails");
- return x;
- }
-
-#define malloc mongo::ourmalloc
-#define realloc mongo::ourrealloc
-
} // namespace mongo
-#include "targetver.h"
-
+#include <memory>
#include <string>
-#include "time.h"
-
-using namespace std;
-
-namespace mongo {
-
- const char * gitVersion();
- const char * sysInfo();
- string mongodVersion();
-
- void printGitVersion();
- void printSysInfo();
-
- /* these are manipulated outside of mutexes, so be careful */
- struct Assertion {
- Assertion() {
- msg[0] = msg[127] = 0;
- context[0] = context[127] = 0;
- file = "";
- line = 0;
- when = 0;
- }
- char msg[128];
- char context[128];
- const char *file;
- unsigned line;
- time_t when;
- void set(const char *m, const char *ctxt, const char *f, unsigned l) {
- strncpy(msg, m, 127);
- strncpy(context, ctxt, 127);
- file = f;
- line = l;
- when = time(0);
- }
- string toString();
- bool isSet() {
- return when != 0;
- }
- };
-
- enum {
- AssertRegular = 0,
- AssertW = 1,
- AssertMsg = 2,
- AssertUser = 3
- };
-
- /* last assert of diff types: regular, wassert, msgassert, uassert: */
- extern Assertion lastAssert[4];
-
- class DBException : public exception {
- public:
- virtual const char* what() const throw() = 0;
- virtual string toString() const {
- return what();
- }
- operator string() const { return toString(); }
- };
-
- class AssertionException : public DBException {
- public:
- string msg;
- AssertionException() { }
- virtual ~AssertionException() throw() { }
- virtual bool severe() {
- return true;
- }
- virtual bool isUserAssertion() {
- return false;
- }
- virtual const char* what() const throw() { return msg.c_str(); }
- };
-
- /* UserExceptions are valid errors that a user can cause, like out of disk space or duplicate key */
- class UserException : public AssertionException {
- public:
- UserException(const char *_msg) {
- msg = _msg;
- }
- UserException(string _msg) {
- msg = _msg;
- }
- virtual bool severe() {
- return false;
- }
- virtual bool isUserAssertion() {
- return true;
- }
- virtual string toString() const {
- return "userassert:" + msg;
- }
- };
-
- class MsgAssertionException : public AssertionException {
- public:
- MsgAssertionException(const char *_msg) {
- msg = _msg;
- }
- virtual bool severe() {
- return false;
- }
- virtual string toString() const {
- return "massert:" + msg;
- }
- };
-
- void asserted(const char *msg, const char *file, unsigned line);
- void wasserted(const char *msg, const char *file, unsigned line);
- void uasserted(const char *msg);
- inline void uasserted(string msg) { uasserted(msg.c_str()); }
- void uassert_nothrow(const char *msg); // reported via lasterror, but don't throw exception
- void msgasserted(const char *msg);
- inline void msgasserted(string msg) { msgasserted(msg.c_str()); }
-
-#ifdef assert
-#undef assert
-#endif
-
-#define assert(_Expression) (void)( (!!(_Expression)) || (asserted(#_Expression, __FILE__, __LINE__), 0) )
-
- /* "user assert". if asserts, user did something wrong, not our code */
-//#define uassert(_Expression) (void)( (!!(_Expression)) || (uasserted(#_Expression, __FILE__, __LINE__), 0) )
-#define uassert(msg,_Expression) (void)( (!!(_Expression)) || (uasserted(msg), 0) )
-
-#define xassert(_Expression) (void)( (!!(_Expression)) || (asserted(#_Expression, __FILE__, __LINE__), 0) )
-
-#define yassert 1
-
- /* warning only - keeps going */
-#define wassert(_Expression) (void)( (!!(_Expression)) || (wasserted(#_Expression, __FILE__, __LINE__), 0) )
-
- /* display a message, no context, and throw assertionexception
-
- easy way to throw an exception and log something without our stack trace
- display happening.
- */
-#define massert(msg,_Expression) (void)( (!!(_Expression)) || (msgasserted(msg), 0) )
-
- /* dassert is 'debug assert' -- might want to turn off for production as these
- could be slow.
- */
-#if defined(_DEBUG)
-#define dassert assert
-#else
-#define dassert(x)
-#endif
-
-} // namespace mongo
-
-#include <stdio.h>
-#include <sstream>
-#include <signal.h>
-
-namespace mongo {
-
- typedef char _TCHAR;
-
-} // namespace mongo
-
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
#include <set>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sstream>
+#include <signal.h>
-namespace mongo {
-
-//using namespace std;
-
-#if !defined(_WIN32)
- typedef int HANDLE;
- inline void strcpy_s(char *dst, unsigned len, const char *src) {
- strcpy(dst, src);
- }
-#else
- typedef void *HANDLE;
-#endif
-
-//#if defined(CHAR)
-//#error CHAR already defined?
-//#endif
-
-//#if defined(_WIN32_WINNT)
-//typedef wchar_t CHAR;
-//#else
-// more to be done...linux unicode is 32 bit.
-//typedef unsigned short CHAR; // 16 bit unicode
-//#endif
-
-#define null (0)
-
- void rawOut( const string &s );
-
-} // namespace mongo
-
-#include <vector>
-
-namespace mongo {
-
-// for debugging
- typedef struct _Ints {
- int i[100];
- } *Ints;
- typedef struct _Chars {
- char c[200];
- } *Chars;
-
- typedef char CHARS[400];
-
- typedef struct _OWS {
- int size;
- char type;
- char string[400];
- } *OWS;
-
- class Database;
- //extern Database *database;
- extern const char *curNs;
-
- /* for now, running on win32 means development not production --
- use this to log things just there.
- */
-#if defined(_WIN32)
-#define WIN if( 1 )
-#else
-#define WIN if( 0 )
-#endif
-
-#if defined(_DEBUG)
-#define DEV if( 1 )
-#else
-#define DEV if( 0 )
-#endif
-
-#define DEBUGGING if( 0 )
-
- // The following declare one unique counter per enclosing function.
- // NOTE The implementation double-increments on a match, but we don't really care.
-#define SOMETIMES( occasion, howOften ) for( static unsigned occasion = 0; ++occasion % howOften == 0; )
-#define OCCASIONALLY SOMETIMES( occasionally, 16 )
-#define RARELY SOMETIMES( rarely, 128 )
-#define ONCE for( static bool undone = true; undone; undone = false )
-
-#if defined(_WIN32)
-#define strcasecmp _stricmp
- inline void our_debug_free(void *p) {
-#if 0
-// this is not safe if you malloc < 4 bytes so we don't use anymore
- unsigned *u = (unsigned *) p;
- u[0] = 0xEEEEEEEE;
-#endif
- free(p);
- }
-#define free our_debug_free
-#endif
+#include "targetver.h"
+#include "time.h"
+#include "string.h"
+#include "limits.h"
-} // namespace mongo
+using namespace std;
#undef yassert
#include <boost/archive/iterators/base64_from_binary.hpp>
@@ -338,7 +70,6 @@ namespace mongo {
#include <boost/shared_ptr.hpp>
#include <boost/smart_ptr.hpp>
#define BOOST_SPIRIT_THREADSAFE
-//#define BOOST_SPIRIT_DEBUG
#include <boost/spirit/core.hpp>
#include <boost/spirit/utility/loops.hpp>
#include <boost/tuple/tuple.hpp>
@@ -347,15 +78,32 @@ namespace mongo {
#define yassert 1
using namespace boost::filesystem;
+#include "util/debug_util.h"
#include "util/goodies.h"
#include "util/log.h"
+#include "util/allocator.h"
+#include "util/assert_util.h"
+
+namespace mongo {
+
+ void sayDbContext(const char *msg = 0);
+ void dbexit(int returnCode, const char *whyMsg = "");
+ void exit( int status );
+ void rawOut( const string &s );
-#define BOOST_CHECK_EXCEPTION( expression ) \
- try { \
- expression; \
- } catch ( const std::exception &e ) { \
- problem() << "caught boost exception: " << e.what() << endl; \
- assert( false ); \
- } catch ( ... ) { \
- assert( false ); \
- }
+} // namespace mongo
+
+namespace mongo {
+
+ const char * gitVersion();
+ const char * sysInfo();
+ string mongodVersion();
+
+ void printGitVersion();
+ void printSysInfo();
+
+ typedef char _TCHAR;
+
+#define null (0)
+
+} // namespace mongo
diff --git a/util/allocator.h b/util/allocator.h
new file mode 100644
index 00000000000..ec8c6c92ba7
--- /dev/null
+++ b/util/allocator.h
@@ -0,0 +1,52 @@
+// allocator.h
+
+/**
+* Copyright (C) 2008 10gen Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License, version 3,
+* as published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+namespace mongo {
+
+ void dbexit(int returnCode, const char *whyMsg);
+
+ inline void * ourmalloc(size_t size) {
+ void *x = malloc(size);
+ if ( x == 0 ) dbexit(42, "malloc fails");
+ return x;
+ }
+
+ inline void * ourrealloc(void *ptr, size_t size) {
+ void *x = realloc(ptr, size);
+ if ( x == 0 ) dbexit(43, "realloc fails");
+ return x;
+ }
+
+#define malloc mongo::ourmalloc
+#define realloc mongo::ourrealloc
+
+#if defined(_WIN32)
+ inline void our_debug_free(void *p) {
+#if 0
+// this is not safe if you malloc < 4 bytes so we don't use anymore
+ unsigned *u = (unsigned *) p;
+ u[0] = 0xEEEEEEEE;
+#endif
+ free(p);
+ }
+#define free our_debug_free
+#endif
+
+} // namespace mongo \ No newline at end of file
diff --git a/util/assert_util.cpp b/util/assert_util.cpp
new file mode 100644
index 00000000000..6adb3d424fb
--- /dev/null
+++ b/util/assert_util.cpp
@@ -0,0 +1,81 @@
+// assert_util.cpp
+
+/**
+* Copyright (C) 2008 10gen Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License, version 3,
+* as published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "stdafx.h"
+#include "assert_util.h"
+#include "assert.h"
+
+namespace mongo {
+
+ string getDbContext();
+
+ Assertion lastAssert[4];
+
+ /* "warning" assert -- safe to continue, so we don't throw exception. */
+ void wasserted(const char *msg, const char *file, unsigned line) {
+ problem() << "Assertion failure " << msg << ' ' << file << ' ' << dec << line << endl;
+ sayDbContext();
+ raiseError(msg && *msg ? msg : "wassertion failure");
+ lastAssert[1].set(msg, getDbContext().c_str(), file, line);
+ }
+
+ void asserted(const char *msg, const char *file, unsigned line) {
+ problem() << "Assertion failure " << msg << ' ' << file << ' ' << dec << line << endl;
+ sayDbContext();
+ raiseError(msg && *msg ? msg : "assertion failure");
+ lastAssert[0].set(msg, getDbContext().c_str(), file, line);
+ throw AssertionException();
+ }
+
+ void uassert_nothrow(const char *msg) {
+ lastAssert[3].set(msg, getDbContext().c_str(), "", 0);
+ raiseError(msg);
+ }
+
+ int uacount = 0;
+ void uasserted(const char *msg) {
+ if ( ++uacount < 100 )
+ log() << "User Exception " << msg << endl;
+ else
+ RARELY log() << "User Exception " << msg << endl;
+ lastAssert[3].set(msg, getDbContext().c_str(), "", 0);
+ raiseError(msg);
+ throw UserException(msg);
+ }
+
+ void msgasserted(const char *msg) {
+ log() << "Assertion: " << msg << '\n';
+ lastAssert[2].set(msg, getDbContext().c_str(), "", 0);
+ raiseError(msg && *msg ? msg : "massert failure");
+ throw MsgAssertionException(msg);
+ }
+
+ string Assertion::toString() {
+ if ( !isSet() )
+ return "";
+
+ stringstream ss;
+ ss << msg << '\n';
+ if ( *context )
+ ss << context << '\n';
+ if ( *file )
+ ss << file << ' ' << line << '\n';
+ return ss.str();
+ }
+
+} \ No newline at end of file
diff --git a/util/assert_util.h b/util/assert_util.h
new file mode 100644
index 00000000000..c184ca3746a
--- /dev/null
+++ b/util/assert_util.h
@@ -0,0 +1,169 @@
+// assert_util.h
+
+/**
+* Copyright (C) 2008 10gen Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License, version 3,
+* as published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "db/lasterror.h"
+
+namespace mongo {
+
+ /* these are manipulated outside of mutexes, so be careful */
+ struct Assertion {
+ Assertion() {
+ msg[0] = msg[127] = 0;
+ context[0] = context[127] = 0;
+ file = "";
+ line = 0;
+ when = 0;
+ }
+ char msg[128];
+ char context[128];
+ const char *file;
+ unsigned line;
+ time_t when;
+ void set(const char *m, const char *ctxt, const char *f, unsigned l) {
+ strncpy(msg, m, 127);
+ strncpy(context, ctxt, 127);
+ file = f;
+ line = l;
+ when = time(0);
+ }
+ std::string toString();
+ bool isSet() {
+ return when != 0;
+ }
+ };
+
+ enum {
+ AssertRegular = 0,
+ AssertW = 1,
+ AssertMsg = 2,
+ AssertUser = 3
+ };
+
+ /* last assert of diff types: regular, wassert, msgassert, uassert: */
+ extern Assertion lastAssert[4];
+
+ class DBException : public std::exception {
+ public:
+ virtual const char* what() const throw() = 0;
+ virtual string toString() const {
+ return what();
+ }
+ operator string() const { return toString(); }
+ };
+
+ class AssertionException : public DBException {
+ public:
+ string msg;
+ AssertionException() { }
+ virtual ~AssertionException() throw() { }
+ virtual bool severe() {
+ return true;
+ }
+ virtual bool isUserAssertion() {
+ return false;
+ }
+ virtual const char* what() const throw() { return msg.c_str(); }
+ };
+
+ /* UserExceptions are valid errors that a user can cause, like out of disk space or duplicate key */
+ class UserException : public AssertionException {
+ public:
+ UserException(const char *_msg) {
+ msg = _msg;
+ }
+ UserException(string _msg) {
+ msg = _msg;
+ }
+ virtual bool severe() {
+ return false;
+ }
+ virtual bool isUserAssertion() {
+ return true;
+ }
+ virtual string toString() const {
+ return "userassert:" + msg;
+ }
+ };
+
+ class MsgAssertionException : public AssertionException {
+ public:
+ MsgAssertionException(const char *_msg) {
+ msg = _msg;
+ }
+ virtual bool severe() {
+ return false;
+ }
+ virtual string toString() const {
+ return "massert:" + msg;
+ }
+ };
+
+ void asserted(const char *msg, const char *file, unsigned line);
+ void wasserted(const char *msg, const char *file, unsigned line);
+ void uasserted(const char *msg);
+ inline void uasserted(string msg) { uasserted(msg.c_str()); }
+ void uassert_nothrow(const char *msg); // reported via lasterror, but don't throw exception
+ void msgasserted(const char *msg);
+ inline void msgasserted(string msg) { msgasserted(msg.c_str()); }
+
+#ifdef assert
+#undef assert
+#endif
+
+#define assert(_Expression) (void)( (!!(_Expression)) || (asserted(#_Expression, __FILE__, __LINE__), 0) )
+
+ /* "user assert". if asserts, user did something wrong, not our code */
+//#define uassert(_Expression) (void)( (!!(_Expression)) || (uasserted(#_Expression, __FILE__, __LINE__), 0) )
+#define uassert(msg,_Expression) (void)( (!!(_Expression)) || (uasserted(msg), 0) )
+
+#define xassert(_Expression) (void)( (!!(_Expression)) || (asserted(#_Expression, __FILE__, __LINE__), 0) )
+
+#define yassert 1
+
+ /* warning only - keeps going */
+#define wassert(_Expression) (void)( (!!(_Expression)) || (wasserted(#_Expression, __FILE__, __LINE__), 0) )
+
+ /* display a message, no context, and throw assertionexception
+
+ easy way to throw an exception and log something without our stack trace
+ display happening.
+ */
+#define massert(msg,_Expression) (void)( (!!(_Expression)) || (msgasserted(msg), 0) )
+
+ /* dassert is 'debug assert' -- might want to turn off for production as these
+ could be slow.
+ */
+#if defined(_DEBUG)
+#define dassert assert
+#else
+#define dassert(x)
+#endif
+
+} // namespace mongo
+
+#define BOOST_CHECK_EXCEPTION( expression ) \
+ try { \
+ expression; \
+ } catch ( const std::exception &e ) { \
+ problem() << "caught boost exception: " << e.what() << endl; \
+ assert( false ); \
+ } catch ( ... ) { \
+ assert( false ); \
+ }
diff --git a/util/debug_util.h b/util/debug_util.h
new file mode 100644
index 00000000000..7fe3fee9f36
--- /dev/null
+++ b/util/debug_util.h
@@ -0,0 +1,66 @@
+// debug_util.h
+
+/**
+* Copyright (C) 2008 10gen Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License, version 3,
+* as published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+namespace mongo {
+
+// for debugging
+ typedef struct _Ints {
+ int i[100];
+ } *Ints;
+ typedef struct _Chars {
+ char c[200];
+ } *Chars;
+
+ typedef char CHARS[400];
+
+ typedef struct _OWS {
+ int size;
+ char type;
+ char string[400];
+ } *OWS;
+
+// for now, running on win32 means development not production --
+// use this to log things just there.
+#if defined(_WIN32)
+#define WIN if( 1 )
+#else
+#define WIN if( 0 )
+#endif
+
+#if defined(_DEBUG)
+#define DEV if( 1 )
+#else
+#define DEV if( 0 )
+#endif
+
+#define DEBUGGING if( 0 )
+
+// The following declare one unique counter per enclosing function.
+// NOTE The implementation double-increments on a match, but we don't really care.
+#define SOMETIMES( occasion, howOften ) for( static unsigned occasion = 0; ++occasion % howOften == 0; )
+#define OCCASIONALLY SOMETIMES( occasionally, 16 )
+#define RARELY SOMETIMES( rarely, 128 )
+#define ONCE for( static bool undone = true; undone; undone = false )
+
+#if defined(_WIN32)
+#define strcasecmp _stricmp
+#endif
+
+} // namespace mongo
diff --git a/util/goodies.h b/util/goodies.h
index 7a68682aa7a..a0bf512f355 100644
--- a/util/goodies.h
+++ b/util/goodies.h
@@ -307,5 +307,14 @@ namespace mongo {
return i;
return -1;
}
+
+#if !defined(_WIN32)
+ typedef int HANDLE;
+ inline void strcpy_s(char *dst, unsigned len, const char *src) {
+ strcpy(dst, src);
+ }
+#else
+ typedef void *HANDLE;
+#endif
} // namespace mongo
diff --git a/util/log.h b/util/log.h
index 58d43117eeb..2b3371d61fc 100644
--- a/util/log.h
+++ b/util/log.h
@@ -21,6 +21,7 @@
namespace mongo {
extern bool quiet;
+ extern const char *curNs;
// Utility interface for stringifying object only when val() called.
class LazyString {
diff --git a/util/util.cpp b/util/util.cpp
index efc8746b3fb..9cc23fd4f8c 100644
--- a/util/util.cpp
+++ b/util/util.cpp
@@ -102,4 +102,47 @@ namespace mongo {
OpTime OpTime::last(0, 0);
+ /* this is a good place to set a breakpoint when debugging, as lots of warning things
+ (assert, wassert) call it.
+ */
+ void sayDbContext(const char *errmsg) {
+ if ( errmsg ) {
+ problem() << errmsg << endl;
+ }
+ printStackTrace();
+ }
+
+ void exit( int status ){
+ dbexit( status );
+ }
+
+ void rawOut( const string &s ) {
+ if( s.empty() ) return;
+ char now[64];
+ time_t_to_String(time(0), now);
+ now[20] = 0;
+#if defined(_WIN32)
+ (std::cout << now << " " << s).flush();
+#else
+ write( STDOUT_FILENO, now, 20 );
+ write( STDOUT_FILENO, " ", 1 );
+ write( STDOUT_FILENO, s.c_str(), s.length() );
+ fsync( STDOUT_FILENO );
+#endif
+ }
+
+#ifndef _SCONS
+ // only works in scons
+ const char * gitVersion(){ return ""; }
+ const char * sysInfo(){ return ""; }
+#endif
+
+ void printGitVersion() { log() << "git version: " << gitVersion() << endl; }
+ void printSysInfo() { log() << "sys info: " << sysInfo() << endl; }
+ string mongodVersion() {
+ stringstream ss;
+ ss << "db version v" << versionString << ", pdfile version " << VERSION << "." << VERSION_MINOR;
+ return ss.str();
+ }
+
} // namespace mongo