[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Piostreams! Now with new identifying thread info!
From: |
Daniel E Baumann |
Subject: |
Re: Piostreams! Now with new identifying thread info! |
Date: |
Fri, 17 Jan 2003 13:43:04 -0600 |
User-agent: |
Mutt/1.5.3i |
It's a side effect of pmping the 'hex' manipulator through the
stream. I don't think I am going to worry about it. Maybe I'll attempt
to fix it down the road, but ppl will just have to deal with it for
now ;).
Dan
On Fri, Jan 17, 2003 at 10:05:34AM +0100, Federico Montesino Pouzols wrote:
>
> It is in CVS. I have noticed a little detail: sometimes the
> thread id number is formatted in hex or with a leading '+'. I do not
> know if it is a bug or it is done so intentionally.
>
> On Thu, Jan 16, 2003 at 12:35:27AM -0600, Daniel E Baumann wrote:
> > Here's a patch which include the previous fixes and with new
> > functionality that prints out identifying thread info.
> >
> > The format is (shamelessly ripped off from gdb):
> >
> > [Thread <tid> (LWP <pid>)]: my regular stream output here.
> >
> > Compile and run the pio.cpp demo program to see this funky stuff in
> > action. I probably should say that this was a quick hack that I
> > did. Ideally it should probably not be compiled in unless you compile
> > cc++ with debuggin' symbols. Also, I may want to add more to the
> > "header", but it's getting late here and I want to use this
> > functionality to find a deadlock in some code :-o. So enjoy :).
> >
> > Dan
> > --
> > And if cynics ridicule freedom, ridicule community...if ``hard nosed
> > realists'' say that profit is the only ideal...just ignore them, and use
> > copyleft all the same.
> > -- RMS
> >
> > Was I helpful? Let others know:
> > http://svcs.affero.net/rm.php?r=chillywilly
>
> > ? piostreams.diff
> > ? config/depcomp
> > ? config/texinfo.tex
> > ? demo/netdevices
> > ? demo/pio
> > ? demo/shadigest
> > ? doc/commoncpp2.info
> > ? doc/commoncpp2.info-1
> > ? doc/commoncpp2.info-2
> > ? doc/commoncpp2.info-3
> > ? include/cc++/pfstream
> > ? ssl/Makefile
> > ? ssl/Makefile.in
> > ? win32/CCXX2.rc
> > Index: include/cc++/pios_init.h
> > ===================================================================
> > RCS file: /cvsroot/commoncpp/commoncpp2/include/cc++/pios_init.h,v
> > retrieving revision 1.1
> > diff -u -3 -p -r1.1 pios_init.h
> > --- include/cc++/pios_init.h 21 Sep 2002 18:26:57 -0000 1.1
> > +++ include/cc++/pios_init.h 16 Jan 2003 06:25:24 -0000
> > @@ -81,7 +81,7 @@ private:
> > } // namespace ost
> > #endif
> >
> > -#endif /* CCXX_PIOS_INIT_H
> > +#endif // CCXX_PIOS_INIT_H
> > /** EMACS **
> > * Local variables:
> > * mode: c++
> > Index: include/cc++/pistream
> > ===================================================================
> > RCS file: /cvsroot/commoncpp/commoncpp2/include/cc++/pistream,v
> > retrieving revision 1.1
> > diff -u -3 -p -r1.1 pistream
> > --- include/cc++/pistream 21 Sep 2002 18:26:57 -0000 1.1
> > +++ include/cc++/pistream 16 Jan 2003 06:25:24 -0000
> > @@ -126,13 +126,15 @@ public:
> > pistream_type&
> > operator>>(unsigned long& n);
> >
> > - //#ifdef _GLIBCPP_USE_LONG_LONG
> > + /*
> > + #ifdef _GLIBCPP_USE_LONG_LONG
> > pistream_type&
> > operator>>(long long& n);
> >
> > pistream_type&
> > operator>>(unsigned long long& n);
> > - //#endif
> > + #endif
> > + */
> >
> > pistream_type&
> > operator>>(float& f);
> > @@ -272,8 +274,8 @@ class basic_piostream
> > {
> > public:
> > // Non-standard Types:
> > - typedef basic_pistream<charT, Traits> pistream_type;
> > - typedef basic_postream<charT, Traits> postream_type;
> > + typedef basic_istream<charT, Traits> istream_type;
> > + typedef basic_ostream<charT, Traits> ostream_type;
> >
> > explicit
> > basic_piostream(basic_streambuf<charT, Traits>* sb)
> > Index: include/cc++/postream
> > ===================================================================
> > RCS file: /cvsroot/commoncpp/commoncpp2/include/cc++/postream,v
> > retrieving revision 1.2
> > diff -u -3 -p -r1.2 postream
> > --- include/cc++/postream 7 Oct 2002 22:35:26 -0000 1.2
> > +++ include/cc++/postream 16 Jan 2003 06:25:24 -0000
> > @@ -85,7 +85,7 @@ public:
> > explicit
> > basic_postream(streambuf_type* sb)
> > : ostream_type(sb), currth(NULL), pid(0), tid(0), lockcnt(0),
> > - owned(false), header(false)
> > + owned(false), header(true)
> > { }
> >
> > virtual
> > @@ -145,13 +145,16 @@ public:
> > operator<<(unsigned int n)
> > { return this->operator<<(static_cast<unsigned long>(n)); }
> >
> > - //#ifdef _GLIBCPP_USE_LONG_LONG
> > + /*
> > + #ifdef _GLIBCPP_USE_LONG_LONG
> > postream_type&
> > operator<<(long long n);
> >
> > postream_type&
> > operator<<(unsigned long long n);
> > - //#endif
> > + #endif
> > + */
> > +
> >
> > postream_type&
> > operator<<(double f);
> > @@ -410,13 +413,10 @@ public:
> > bool owned;
> > bool header;
> >
> > - void lockStream();
> > - void unlockStream();
> > void outputHeader();
> > protected:
> > mutable Mutex lock;
> > mutable Mutex lockbuf;
> > - //mutable Mutex mtx;
> > };
> >
> > /**
> > Index: include/cc++/postream.tcc
> > ===================================================================
> > RCS file: /cvsroot/commoncpp/commoncpp2/include/cc++/postream.tcc,v
> > retrieving revision 1.2
> > diff -u -3 -p -r1.2 postream.tcc
> > --- include/cc++/postream.tcc 7 Oct 2002 22:35:26 -0000 1.2
> > +++ include/cc++/postream.tcc 16 Jan 2003 06:25:24 -0000
> > @@ -98,22 +98,6 @@ operator<<(postream_type& (*pf)(postream
> > return *this;
> > }
> >
> > -/*
> > - template<typename charT, typename Traits>
> > - basic_postream<charT, Traits>&
> > - basic_postream<charT, Traits>::
> > - operator<<(ostream_type& (*pf)(ostream_type&))
> > - {
> > - // Create a psentry object (may set error bits or throw failure)
> > - typedef basic_postream<charT, Traits> postream_type;
> > - typename postream_type::psentry opfx(*this);
> > -
> > - ostream_type::operator<<(pf);
> > -
> > - return *this;
> > - }
> > -*/
> > -
> > template<typename charT, typename Traits>
> > basic_postream<charT, Traits>&
> > basic_postream<charT, Traits>::
> > @@ -150,6 +134,8 @@ basic_postream<charT, Traits>::operator<
> > typedef basic_postream<charT, Traits> postream_type;
> > typename postream_type::psentry opfx(*this);
> >
> > + outputHeader();
> > +
> > ostream_type::operator<<(n);
> >
> > return *this;
> > @@ -163,6 +149,8 @@ basic_postream<charT, Traits>::operator<
> > typedef basic_postream<charT, Traits> postream_type;
> > typename postream_type::psentry opfx(*this);
> >
> > + outputHeader();
> > +
> > ostream_type::operator<<(n);
> >
> > return *this;
> > @@ -176,12 +164,15 @@ basic_postream<charT, Traits>::operator<
> > typedef basic_postream<charT, Traits> postream_type;
> > typename postream_type::psentry opfx(*this);
> >
> > + outputHeader();
> > +
> > ostream_type::operator<<(n);
> >
> > return *this;
> > }
> >
> > -// TODO: #ifdef USE_LONG_LONG
> > +/*
> > +#ifdef USE_LONG_LONG
> > template<typename charT, typename Traits>
> > basic_postream<charT, Traits>&
> > basic_postream<charT, Traits>::operator<<(long long n)
> > @@ -201,12 +192,15 @@ basic_postream<charT, Traits>::operator<
> > // Create a psentry object (may set error bits or throw failure)
> > typedef basic_postream<charT, Traits> postream_type;
> > typename postream_type::psentry opfx(*this);
> > +
> > + outputHeader();
> >
> > ostream_type::operator<<(n);
> >
> > return *this;
> > }
> > -//#endif
> > +#endif
> > +*/
> >
> > template<typename charT, typename Traits>
> > basic_postream<charT, Traits>&
> > @@ -216,6 +210,8 @@ basic_postream<charT, Traits>::operator<
> > typedef basic_postream<charT, Traits> postream_type;
> > typename postream_type::psentry opfx(*this);
> >
> > + outputHeader();
> > +
> > ostream_type::operator<<(f);
> >
> > return *this;
> > @@ -229,6 +225,8 @@ basic_postream<charT, Traits>::operator<
> > typedef basic_postream<charT, Traits> postream_type;
> > typename postream_type::psentry opfx(*this);
> >
> > + outputHeader();
> > +
> > ostream_type::operator<<(f);
> >
> > return *this;
> > @@ -242,6 +240,8 @@ basic_postream<charT, Traits>::operator<
> > typedef basic_postream<charT, Traits> postream_type;
> > typename postream_type::psentry opfx(*this);
> >
> > + outputHeader();
> > +
> > ostream_type::operator<<(p);
> >
> > return *this;
> > @@ -255,6 +255,8 @@ basic_postream<charT, Traits>::operator<
> > typedef basic_postream<charT, Traits> postream_type;
> > typename postream_type::psentry opfx(*this);
> >
> > + outputHeader();
> > +
> > ostream_type::operator<<(sbin);
> >
> > return *this;
> > @@ -283,7 +285,7 @@ basic_postream<charT, Traits>::write(con
> >
> > ostream_type::write(s, n);
> >
> > - retrn *this;
> > + return *this;
> > }
> >
> > template<typename charT, typename Traits>
> > @@ -296,7 +298,9 @@ basic_postream<charT, Traits>::flush()
> >
> > ostream_type::flush();
> >
> > - //this->unlockStream();
> > + header = true;
> > +
> > + return *this;
> > }
> >
> > template<typename charT, typename Traits>
> > @@ -366,6 +370,8 @@ operator<<(basic_postream<charT, Traits>
> > typedef basic_postream<charT, Traits> postream_type;
> > typename postream_type::psentry opfx(out);
> >
> > + out.outputHeader();
> > +
> > std::operator<<(out, c);
> >
> > return out;
> > @@ -402,6 +408,25 @@ basic_postream<charT, Traits>::widen(cha
> > return ostream_type::widen(c);
> > }
> >
> > +template<typename charT, typename Traits>
> > +void
> > +basic_postream<charT, Traits>::outputHeader()
> > +{
> > + pid = static_cast<int>(getpid());
> > + tid = static_cast<int>(ost::getThread()->getThreadID());
> > + if (header)
> > + {
> > + // Call the ostream methods so as not to have
> > + // to worry about deadlocking
> > + std::operator<<(*this, "[Thread ");
> > + ostream_type::operator<<(tid);
> > + std::operator<<(*this, " (LWP ");
> > + ostream_type::operator<<(pid);
> > + std::operator<<(*this, ")]: ");
> > + }
> > + header = false;
> > +}
> > +
> > // Specializations
> > template<typename Traits>
> > basic_postream<char, Traits>&
> > @@ -410,6 +435,8 @@ operator<<(basic_postream<char, Traits>&
> > typedef basic_postream<char, Traits> postream_type;
> > typename postream_type::psentry opfx(out);
> >
> > + out.outputHeader();
> > +
> > std::operator<<(out, c);
> >
> > return out;
> > @@ -423,6 +450,8 @@ operator<<(basic_postream<charT, Traits>
> > typedef basic_postream<char, Traits> postream_type;
> > typename postream_type::psentry opfx(out);
> >
> > + out.outputHeader();
> > +
> > std::operator<<(out, s);
> >
> > return out;
> > @@ -436,7 +465,7 @@ operator<<(basic_postream<charT, Traits>
> > typedef basic_postream<char, Traits> postream_type;
> > typename postream_type::psentry opfx(out);
> >
> > - out.currth = ost::getThread();
> > + out.outputHeader();
> >
> > std::operator<<(out, s);
> >
> > @@ -452,9 +481,7 @@ operator<<(basic_postream<char, Traits>&
> > typedef basic_postream<char, Traits> postream_type;
> > typename postream_type::psentry opfx(out);
> >
> > - out.currth = ost::getThread();
> > - int tid = static_cast<int>(out.currth->getThreadID());
> > - //out.operator<<(tid);
> > + out.outputHeader();
> >
> > std::operator<<(out, s);
> >
> > @@ -471,10 +498,7 @@ operator<<(basic_postream<charT, Traits>
> > typedef basic_postream<charT, Traits> postream_type;
> > typename postream_type::psentry opfx(out);
> >
> > - out.currth = ost::getThread();
> > - int tid = (int)out.currth->getThreadID();
> > - //printf("PID: %d\n", getpid());
> > - //printf("TID: %d\n", tid);
> > + out.outputHeader();
> >
> > std::operator<<(out, str);
> >
> > Index: include/cc++/thread.h
> > ===================================================================
> > RCS file: /cvsroot/commoncpp/commoncpp2/include/cc++/thread.h,v
> > retrieving revision 1.20
> > diff -u -3 -p -r1.20 thread.h
> > --- include/cc++/thread.h 9 Jan 2003 13:53:09 -0000 1.20
> > +++ include/cc++/thread.h 16 Jan 2003 06:25:24 -0000
> > @@ -1066,6 +1066,7 @@ friend class PosixThread;
> > /** @internal */
> > friend class DummyThread;
> > private:
> > + friend class postream_type;
> > friend class Slog;
> >
> > Semaphore joinSem;
>
> > _______________________________________________
> > Bug-commoncpp mailing list
> > address@hidden
> > http://mail.gnu.org/mailman/listinfo/bug-commoncpp
>
--
And if cynics ridicule freedom, ridicule community...if ``hard nosed
realists'' say that profit is the only ideal...just ignore them, and use
copyleft all the same.
-- RMS
Was I helpful? Let others know:
http://svcs.affero.net/rm.php?r=chillywilly