diff options
author | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2011-09-05 23:30:20 +0000 |
---|---|---|
committer | jsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68> | 2011-09-05 23:30:20 +0000 |
commit | a44b60593ab559f66ac3e984eb89133b8ca1e260 (patch) | |
tree | 2b7c230b3dae78c48e36f626c3b466b9eff9cb27 /sca-cpp | |
parent | 4f1cd537bc7c5a35f03660c4d04754954fae0487 (diff) |
Improve logging with multiple threads and processes.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1165450 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-cpp')
-rw-r--r-- | sca-cpp/trunk/kernel/fstream.hpp | 23 | ||||
-rw-r--r-- | sca-cpp/trunk/kernel/parallel-test.cpp | 20 | ||||
-rw-r--r-- | sca-cpp/trunk/kernel/parallel.hpp | 27 |
3 files changed, 47 insertions, 23 deletions
diff --git a/sca-cpp/trunk/kernel/fstream.hpp b/sca-cpp/trunk/kernel/fstream.hpp index 6888e7d14d..89d1909f15 100644 --- a/sca-cpp/trunk/kernel/fstream.hpp +++ b/sca-cpp/trunk/kernel/fstream.hpp @@ -29,6 +29,11 @@ #include <stdio.h> #include <stdarg.h> #include <time.h> +#include <sys/time.h> +#include <unistd.h> +#ifdef WANT_THREADS +#include <pthread.h> +#endif #include "string.hpp" #include "stream.hpp" @@ -149,10 +154,14 @@ ifstream cin(stdin); * Format the current time. */ const string logTime() { - const time_t t = ::time(NULL); + struct timeval tv; + gettimeofday(&tv, NULL); + const time_t t = tv.tv_sec; const tm* lt = localtime(&t); char ft[32]; - strftime(ft, 31, "%a %b %d %H:%M:%S %Y", lt); + strftime(ft, 20, "%a %b %d %H:%M:%S", lt); + sprintf(ft + 19, ".%06lu ", (unsigned long)tv.tv_usec); + strftime(ft + 27, 5, "%Y", lt); return ft; } @@ -203,11 +212,19 @@ private: bool owner; bool head; + const unsigned long tid() const { +#ifdef WANT_THREADS + return (unsigned long)pthread_self(); +#else + return 0; +#endif + } + logfstream& whead() { if (head) return *this; head = true; - *this << "[" << logTime() << "] [" << type << "] "; + *this << "[" << logTime() << "] [" << type << "] [pid " << (unsigned long)getpid() << ":tid " << tid() << "] "; return *this; } }; diff --git a/sca-cpp/trunk/kernel/parallel-test.cpp b/sca-cpp/trunk/kernel/parallel-test.cpp index f883d19f69..59cfd81978 100644 --- a/sca-cpp/trunk/kernel/parallel-test.cpp +++ b/sca-cpp/trunk/kernel/parallel-test.cpp @@ -136,15 +136,15 @@ bool checkSquareResults(const list<future<int> > r, int i) { return true; } -const gc_ptr<long int> tlsvc() { - gc_ptr<long int> i = new (gc_new<long int>()) long int(); +const gc_ptr<unsigned long> tlsvc() { + gc_ptr<unsigned long> i = new (gc_new<unsigned long>()) unsigned long(); *i = 0l; return i; } -const perthread_ptr<long int> tlsv(tlsvc); +const perthread_ptr<unsigned long> tlsv(tlsvc); const long int tlsset(gc_ptr<wqueue<bool>> wq, gc_ptr<wqueue<bool>> xq) { - const long int v = *tlsv; + const unsigned long v = *tlsv; *tlsv = threadId(); enqueue(*xq, true); dequeue(*wq); @@ -183,8 +183,7 @@ bool checkTLSSets(const list<future<long int> > s) { if (isNil(s)) return true; assert(car(s) == 0); - checkTLSSets(cdr(s)); - return true; + return checkTLSSets(cdr(s)); } const list<future<bool> > submitTLSChecks(worker& w, wqueue<bool>& wq, wqueue<bool>& xq, const int max, const int i) { @@ -198,23 +197,21 @@ bool checkTLSResults(const list<future<bool> > r) { if (isNil(r)) return true; assert(car(r) == true); - checkTLSResults(cdr(r)); - return true; + return checkTLSResults(cdr(r)); } bool testWorker() { - worker w(20); + const int max = 100; + worker w(max); { const lambda<int()> func = curry(lambda<int(const int)> (mtsquare), 2); assert(submit(w, func) == 4); } { - const int max = 20; const list<future<int> > r(submitSquares(w, max, 0)); checkSquareResults(r, 0); } { - const int max = 20; wqueue<bool> wq(max); unblockWorkers(wq, max); waitForWorkers(wq, max); @@ -222,7 +219,6 @@ bool testWorker() { waitForWorkers(wq, max); } { - const int max = 20; wqueue<bool> wq(max); wqueue<bool> xq(max); const list<future<long int> > s(submitTLSSets(w, wq, xq, max, 0)); diff --git a/sca-cpp/trunk/kernel/parallel.hpp b/sca-cpp/trunk/kernel/parallel.hpp index 648cd60cfc..57754a33e6 100644 --- a/sca-cpp/trunk/kernel/parallel.hpp +++ b/sca-cpp/trunk/kernel/parallel.hpp @@ -26,10 +26,9 @@ * Simple parallel work execution functions. */ +#include <unistd.h> #ifdef WANT_THREADS #include <pthread.h> -#include <sys/syscall.h> -#include <unistd.h> #endif #include "function.hpp" @@ -37,17 +36,20 @@ namespace tuscany { +/** + * Returns the current process id. + */ +unsigned long processId() { + return (unsigned long)getpid(); +} + #ifdef WANT_THREADS /** * Returns the current thread id. */ -long int threadId() { -#ifdef IS_DARWIN - return syscall(SYS_thread_selfid); -#else - return syscall(SYS_gettid); -#endif +unsigned long threadId() { + return (unsigned long)pthread_self(); } /** @@ -317,6 +319,15 @@ const bool cancel(worker& w) { return true; } +#else + +/** + * Returns the current thread id. + */ +unsigned long threadId() { + return 0; +} + #endif /** |