Subject: Re: [dtn-users] Timers
From: Bowei Du <[email-masked]>
To: [email-masked]
Date: Tue, 23 Aug 2005 12:20:31 -0700
List-Id: discussion/answers list for users of the dtn reference implementation <dtn-users.mailman.dtnrg.org>

Hi Isidro,

Try looking at servlib/bundling/ExpirationTimer.cc|h for an example of
a class using the oasys::Timer object. Override the timeout() method
to modify how the timer behaves when it times out and use the
schedule_at() method to schedule the timer. For an example on how
ExpirationTimer is used, look at servlib/bundling/BundleDaemon.cc|h
around lines 508.

Bowei

On Tue, Aug 23, 2005 at 08:49:20PM +0200, Isidro Nistal Garrido wrote:
> hello
> 
> I would like to use one timer to resend bundles in the DTN2 code, I am trying to
> use the one that is implemented in oasys "thread/timer.h" but I don't know how
> to create it or to assign events to it, could you tell me some place in the code
> where a Timer is used (I havent found any) or some advices about how to schedule
> a timer that ,if is not cancelled, when it finish resend the bundles from a
> BundleList
> 
> Thanks 
> 
> Isidro Nistal Garrido
> Spanish Exchange Student in Luleå
> Tfn: +46 730 583 165
> 
> _______________________________________________
> dtn-users mailing list
> [email-masked]
> http://mailman.dtnrg.org/mailman/listinfo/dtn-users

Date: Tue, 23 Aug 2005 20:49:20 +0200
From: Isidro Nistal Garrido <[email-masked]>
To: [email-masked]
Subject: [dtn-users] Timers
Sender: [email-masked]
Reply-To: [email-masked]

hello

I would like to use one timer to resend bundles in the DTN2 code, I am trying to
use the one that is implemented in oasys "thread/timer.h" but I don't know how
to create it or to assign events to it, could you tell me some place in the code
where a Timer is used (I havent found any) or some advices about how to schedule
a timer that ,if is not cancelled, when it finish resend the bundles from a
BundleList

Thanks 

Isidro Nistal Garrido
Spanish Exchange Student in Luleå
Tfn: +46 730 583 165

Date: Thu, 18 Aug 2005 10:02:06 -0700
From: Michael Demmer <[email-masked]>
To: [email-masked]
Subject: Re: [dtn-users] Last cvs
Sender: [email-masked]
Reply-To: [email-masked]

> Hello everybody and sorry for bother you so much,
> 
>  you told me like 2 weeks ago that there was somebody working on custody
> transfer, I have found in the last dtnsend appplication from cvs that feature
> implemented, but it doesn't work properly,could you tell me who is working on
> that so I can ask him some stuff, 

I believe you're confusing the state of the implementation. We do have
an individual working on custody transfer currently but it is not yet
completed and therefore not checked into the repository.

You may be noticing that some applications (dtnsend in particular)
allow the user to specify that custody transfer is requested, but the
dtnd implementation will silently ignore the request currently.

I expect that in a month or so we will announce a new major release
that includes updates to the latest version of the bundling spec as
fully as possible (including custody transfer).

-m

Date: Mon, 15 Aug 2005 11:00:14 -0600
From: Jeff Allen <[email-masked]>
To: [email-masked], [email-masked]
Subject: [dtn-users] dtn_bind now takes two args
Sender: [email-masked]
Reply-To: [email-masked]

I've just checked in some changes to make dtn_bind in the DTN API only
take two args instead of three.

THIS IS AN INCOMPATIBLE CHANGE, and you'll need to go edit any program
of yours that calls dtn_bind to remove the endpoint argument.

Mike asked me to do this a while ago when I pointed out that the regid
forms a unique key for the registration table and that the endpoint is
just a distraction.

  -jra

Content-class: urn:content-classes:message
Subject: RE: [dtn-users] Implement routing protocol in Python?
Date: Wed, 10 Aug 2005 09:59:04 -0400
From: "Durst,Robert C." <[email-masked]>
To: <[email-masked]>, "Anders Lindgren" <[email-masked]>
Cc: "Pierre Fransson" <[email-masked]>
Sender: [email-masked]
Reply-To: [email-masked]

I am working on an interface for DTN2 that makes DTN2 events and actions
available via an RPC-like interface.  The goal of this is exactly what
you describe:  to be able to run different routing algorithms external
to DTN2.  If I'm successful, you'll be able to "walk up" to a running
DTN2 and, possibly with proper authentication, register an external
routing module and have it participate.

Mike Demmer is off-line right now (just got married -- Congratulations,
Mike!), but is working on an extension to DTN2 that will allow multiple
routing algorithms to run simultaneously, in case you want to have yours
compare answers with an internal module.

I haven't made as much progress on this interface as I'd like due to
some personal issues going on, but am very happy that you are interested
in pursuing this, particularly as an external Python routing algorithm
allows us to really test the "tool chain independence" goal of the
interface.  

I'll send more details as they become available.

Best regards,
Bob Durst  

-----Original Message-----
From: [email-masked]
[mailto:[email-masked]] On Behalf Of Anders Lindgren
Sent: Wednesday, August 10, 2005 9:40 AM
To: [email-masked]
Cc: Pierre Fransson
Subject: [dtn-users] Implement routing protocol in Python?

Hi,

We would like to implement our routing protocol for intermittently
connected networks, PRoPHET (as described in
draft-lindgren-dtnrg-prophet-01.txt) in Python to have a nice and clean
reference implementation. We would however also like the protocol to be
able to work with the DTN2 bundling implementation so that the protocol
would be usable with applications that have been adapted for the DTN2
implementation (so that the routing protocol e.g. gets the bundles to
send from that code, and delivers bundles there as well).

Our question is now how feasible this is with the current structure of
the
code. Is it possible to create a routing protocol that is relatively
"external" to the rest of the code and only uses some interfaces into
the
DTN2 code for necessary thing (i.e., are there such interfaces?), or is
the only reasonable way to do a protocol that interacts with the DTN2
code
to do it intermingled with that code (preferrably in C++)??

Any ideas, clarifications, and suggestions are welcome.

/Anders and Pierre
_______________________________________________
dtn-users mailing list
[email-masked]
http://mailman.dtnrg.org/mailman/listinfo/dtn-users

Date: Wed, 10 Aug 2005 15:40:25 +0200 (MEST)
From: Anders Lindgren <[email-masked]>
To: [email-masked]
cc: Pierre Fransson <[email-masked]>
Subject: [dtn-users] Implement routing protocol in Python?
Sender: [email-masked]
Reply-To: [email-masked]

Hi,

We would like to implement our routing protocol for intermittently
connected networks, PRoPHET (as described in
draft-lindgren-dtnrg-prophet-01.txt) in Python to have a nice and clean
reference implementation. We would however also like the protocol to be
able to work with the DTN2 bundling implementation so that the protocol
would be usable with applications that have been adapted for the DTN2
implementation (so that the routing protocol e.g. gets the bundles to
send from that code, and delivers bundles there as well).

Our question is now how feasible this is with the current structure of the
code. Is it possible to create a routing protocol that is relatively
"external" to the rest of the code and only uses some interfaces into the
DTN2 code for necessary thing (i.e., are there such interfaces?), or is
the only reasonable way to do a protocol that interacts with the DTN2 code
to do it intermingled with that code (preferrably in C++)??

Any ideas, clarifications, and suggestions are welcome.

/Anders and Pierre

Date: Mon,  8 Aug 2005 17:00:35 +0200
From: Isidro Nistal Garrido <[email-masked]>
To: [email-masked]
Subject: [dtn-users] Last cvs
Sender: [email-masked]
Reply-To: [email-masked]

Hello everybody and sorry for bother you so much,

 you told me like 2 weeks ago that there was somebody working on custody
transfer, I have found in the last dtnsend appplication from cvs that feature
implemented, but it doesn't work properly,could you tell me who is working on
that so I can ask him some stuff, 

Thanks in advance

Isidro Nistal Garrido
Spanish Exchange Student in Luleå
Tfn: +46 730 583 165

From: Darren Long <[email-masked]>
Subject: Re: [dtn-users] Link timing
Date: Thu, 4 Aug 2005 21:07:32 +0100
To: [email-masked]
Sender: [email-masked]
Reply-To: [email-masked]

I resorted to commenting out the ASSERT and rebuilding it.  This  
seems reasonable when you look at the state machine's description in  
the header file, but it remains a temporary hack until Mike confirms  
the expected behaviour!  At least it doesn't die now.

That hasn't helped much, though as there till seems to be issues that  
could be a result of a bug that is causing the ASSERT to fail.

I'm looking at using ssh tunnels for use over GPRS/UMTS and from  
public hotspots.  They might offer you a good way of creating and  
tearing down links, too.  That said, with the quality of the GPRS  
connection I was getting in Crawley, It would be better to run ssh  
over DTN.  The GPRS (or possibly bluetooth) connection wouldn't stay  
up long enough to set up the tunnels.

Darren

On 4 Aug 2005, at 17:29, Joshua Schoolcraft wrote:

> What's the best way to go about changing DTN topology mid-flight
> without unplugging cables?  'link close' tends to cause the target
> daemon to spit out
>
> [1123159379.120409 /assert critical] ASSERTION FAILED (state_ ==  
> UNAVAILABLE) at
>  bundling/Link.cc:132
>
> and then quit.
>
> On 8/2/05, Michael Demmer <[email-masked]> wrote:
>
>>
>>
>>> For simulation purposes, is there a way to bring routes up and down
>>> based upon a preset schedule?  I would like to run scripted  
>>> scenarios
>>> where I can pick the availability of specific routes ahead of time.
>>>
>>
>> The configuration file is parsed and executed by a standard tcl
>> interpreter, so you can set up a script to run in each daemon that
>> will periodically change the link topology by using tcl builtins like
>> the 'after' command.
>>
>> -m
>>
>> _______________________________________________
>> dtn-users mailing list
>> [email-masked]
>> http://mailman.dtnrg.org/mailman/listinfo/dtn-users
>>
>>
> _______________________________________________
> dtn-users mailing list
> [email-masked]
> http://mailman.dtnrg.org/mailman/listinfo/dtn-users
>

Date: Thu, 4 Aug 2005 12:38:29 -0600
From: Jeff Allen <[email-masked]>
To: [email-masked]
Subject: Re: [dtn-users] Link timing
Sender: [email-masked]
Reply-To: [email-masked]

While you're waiting for a fix to the assert, you might be able to use
one of these methods from Unix:

  a. drop the link with "ifconfig eth0 down". With two interfaces, one
for testing, and one for accessing the box, it is not too
inconvenient.
  b. add a host route for the IP address of the destination on the
source machine, but have the route point at 127.0.0.1. When you want
the link to work again, remove the host route.

(b) is more surgical than (a). You can knock out a single IP, or a
range of IPs (by using a network route instead) instead of having to
take down the whole interface.

  -jra

Date: Thu, 4 Aug 2005 09:29:59 -0700
From: Joshua Schoolcraft <[email-masked]>
To: [email-masked]
Subject: Re: [dtn-users] Link timing
Sender: [email-masked]
Reply-To: [email-masked]

What's the best way to go about changing DTN topology mid-flight
without unplugging cables?  'link close' tends to cause the target
daemon to spit out

[1123159379.120409 /assert critical] ASSERTION FAILED (state_ == UNAVAILABLE) at
 bundling/Link.cc:132

and then quit.

On 8/2/05, Michael Demmer <[email-masked]> wrote:
> 
> > For simulation purposes, is there a way to bring routes up and down
> > based upon a preset schedule?  I would like to run scripted scenarios
> > where I can pick the availability of specific routes ahead of time.
> 
> The configuration file is parsed and executed by a standard tcl
> interpreter, so you can set up a script to run in each daemon that
> will periodically change the link topology by using tcl builtins like
> the 'after' command.
> 
> -m
> 
> _______________________________________________
> dtn-users mailing list
> [email-masked]
> http://mailman.dtnrg.org/mailman/listinfo/dtn-users
>

Date: Tue, 2 Aug 2005 16:25:36 -0700
From: Michael Demmer <[email-masked]>
To: [email-masked]
Subject: Re: [dtn-users] Link timing
Sender: [email-masked]
Reply-To: [email-masked]

> For simulation purposes, is there a way to bring routes up and down
> based upon a preset schedule?  I would like to run scripted scenarios
> where I can pick the availability of specific routes ahead of time.

The configuration file is parsed and executed by a standard tcl
interpreter, so you can set up a script to run in each daemon that
will periodically change the link topology by using tcl builtins like
the 'after' command.

-m

Date: Tue, 2 Aug 2005 16:14:50 -0700
From: Joshua Schoolcraft <[email-masked]>
To: [email-masked]
Subject: [dtn-users] Link timing
Sender: [email-masked]
Reply-To: [email-masked]

For simulation purposes, is there a way to bring routes up and down
based upon a preset schedule?  I would like to run scripted scenarios
where I can pick the availability of specific routes ahead of time.

Thanks,
Josh

Date: Mon, 1 Aug 2005 16:58:03 -0700
From: Michael Demmer <[email-masked]>
To: [email-masked]
Subject: Re: [dtn-users] Problems with DTN from CVS (1 of 3)
Sender: [email-masked]
Reply-To: [email-masked]

Hi Darren,

Thanks for all the bug reports. I'm going to be out of town and
generally unreachable by email for the next few weeks, so
unfortunately I won't really be able to deal with these issues.

But, if you make any more progress tracking the problems down, please
continue to post the fixes here and I will make sure to propagate them
back to the CVS tree when I get back.

Thanks,
-mike

From: Darren Long <[email-masked]>
Subject: Re: [dtn-users] Problems with DTN from CVS (2 of 3)
Date: Mon, 1 Aug 2005 18:41:39 +0100
To: [email-masked]
Sender: [email-masked]
Reply-To: [email-masked]

More on this issue...

i think the line from the log below is a hint at what is going wrong  
here:
     [1122726726.002382 /timer debug] scheduling timer 0x95ac6e0 in  
-2056476421 ms at 4148622193:261405

I've been playing with DTN2 in Cygwin too today, and haven't observed  
this problem.  Most notably, the scheduled timers appear to be in the  
future.  This may be a red herring though, as the Cygwin builds are  
not from the same CVS checkout.

Darren

[1122726726.000787 /bundle/daemon debug] adding bundle bundle id 22  
bundles://internet/host://ibook12.dyndns.org/dtntunnel -> bundles:// 
internet/host://soltek/fred (12 bytes payload) to pending list
[1122726726.000807 /bundle/refs debug] bundle id 22: refcount 1 -> 2  
(0 mappings) add bundle_list pending_bundles
[1122726726.000818 /bundle/mapping debug] bundle id 22 add mapping  
[pending_bundles]
[1122726726.000835 /bundle/actions debug] adding bundle 22 to data store
[1122726726.000859 /berkeleydb/table(bundles) debug] put: serializing  
256 byte object
[1122726726.000871 /mutex/lock(0x95a2d64) debug] locked (count 1)
[1122726726.001015 /cl/tcp/conn/192.168.0.6:50924 debug] connection  
not idle: 41 <= 30000
[1122726726.001028 /cl/tcp/conn/192.168.0.6:50924 debug] recv_loop:  
blocking on frame typecode... (timeout 4000)
[1122726726.002335 /mutex/lock(0x95a2d64) debug] unlocked (count 0)
[1122726726.002354 /bundle/daemon debug] scheduling expiration timer  
for bundle id 22
[1122726726.002368 /bundle/refs debug] bundle id 22: refcount 2 -> 3  
(1 mappings) add expiration timer
[1122726726.002382 /timer debug] scheduling timer 0x95ac6e0 in  
-2056476421 ms at 4148622193:261405
[1122726726.002412 /timer debug] poll: events 0x1 timeout 1357011001  
revents 0x1 cc 1
[1122726726.002432 /timer debug] poll returned due to signal
[1122726726.002446 /timer/signal debug] drain_pipe: drained 1 byte(s)  
from pipe
[1122726726.002462 /timer debug] popping timer at 1122726726.2456
[1122726726.002474 /bundle/refs debug] bundle id 22: refcount 3 -> 4  
(1 mappings) add BundleExpiredEvent
[1122726726.002486 /bundle/daemon debug] posting event with type  
BUNDLE_EXPIRED
[1122726726.002499 /bundle/refs debug] bundle id 22: refcount 4 -> 3  
(1 mappings) del expiration timer
[1122726726.002518 /bundle/daemon debug] checking for matching  
registrations for bundle bundle id 22 bundles://internet/host:// 
ibook12.dyndns.org/dtntunnel -> bundles://internet/host://soltek/fred  
(12 bytes payload)
[1122726726.002564 /registration debug] get_matching bundles:// 
internet/host://soltek/fred
[1122726726.002602 /af/internet debug] match succeeded: pattern  
'soltek' admin 'soltek'
[1122726726.002615 /registration debug] matched registration 10  
bundles://internet/host://soltek/fred
[1122726726.002629 /registration debug] get_matching bundles:// 
internet/host://soltek/fred: returned 1 matches
[1122726726.002642 /bundle/daemon debug] delivering bundle bundle id  
22 bundles://internet/host://ibook12.dyndns.org/dtntunnel ->  
bundles://internet/host://soltek/fred (12 bytes payload) to  
registration bundles://internet/host://soltek/fred
[1122726726.002655 /registration/10 info] enqueue bundle id 22 for  
delivery to bundles://internet/host://soltek/fred
[1122726726.002669 /bundle/refs debug] bundle id 22: refcount 3 -> 4  
(1 mappings) add bundle_list /registration/10
[1122726726.002680 /bundle/mapping debug] bundle id 22 add mapping [/ 
registration/10]
[1122726726.002708 /notifier/0x95bf588 debug] poll: events 0x1  
timeout -1 revents 0x1 cc 1
[1122726726.002725 /notifier/0x95bf588 debug] drain_pipe: drained 1  
byte(s) from pipe
[1122726726.002740 /bundle/mapping debug] bundle id 22 del_bundle:  
deleting mapping [/registration/10]
[1122726726.002756 /apiclient/16 debug] handle_recv: popped bundle  
for registration 10 (timeout -1)
[1122726726.002787 /bundle/refs debug] bundle id 22: refcount 4 -> 5  
(1 mappings) add BundleTransmittedEvent
[1122726726.002799 /bundle/daemon debug] posting event with type  
BUNDLE_TRANSMITTED
[1122726726.002811 /bundle/refs debug] bundle id 22: refcount 5 -> 4  
(1 mappings) del api_client /registration/10
[1122726726.002824 /apiclient/16 debug] building reply: status  
(unknown type), length 904
[1122726726.002836 /apiclient/16 debug] sending 912 byte reply message
[1122726726.002927 /apiclient/16 debug] writeall 912/912
[1122726726.003229 /apiclient/16 debug] read 16/65536
[1122726726.003277 /apiclient/16 debug] got DTN_RECV (8/8 bytes)
[1122726726.003295 /apiclient/16 debug] handle_recv: blocking to get  
bundle for registration 10 (timeout -1)
[1122726726.003326 /route/static debug] dispatching event  
BUNDLE_RECEIVED
[1122726726.003339 /route/static debug] handle bundle received:  
bundle id 22 bundles://internet/host://ibook12.dyndns.org/dtntunnel - 
 > bundles://internet/host://soltek/fred (12 bytes payload)
[1122726726.003354 /route/static/table debug] get_matching bundles:// 
internet/host://soltek/fred
[1122726726.003366 /route/static/table debug] check entry bundles:// 
internet/host://ibook12.dyndns.org/* -> host://ibook12.dyndns.org: 
5000 (FORWARD_COPY)
[1122726726.003391 /af/internet debug] match failed: url hosts not  
equal ('ibook12.dyndns.org' != 'soltek')
[1122726726.003405 /route/static/table debug] get_matching bundles:// 
internet/host://soltek/fred done, 0 match(es)
[1122726726.003416 /route/static debug] fwd_to_matching bundles:// 
internet/host://soltek/fred: 0 matches
[1122726726.003429 /bundle/refs debug] bundle id 22: refcount 4 -> 3  
(1 mappings) del BundleReceivedEvent
[1122726726.003442 /bundle/daemon debug] dispatching event  
BUNDLE_EXPIRED
[1122726726.003453 /bundle/daemon info] BUNDLE_EXPIRED bundle id 22  
bundles://internet/host://ibook12.dyndns.org/dtntunnel -> bundles:// 
internet/host://soltek/fred (12 bytes payload)
[1122726726.003464 /bundle/daemon debug] removing bundle bundle id 22  
bundles://internet/host://ibook12.dyndns.org/dtntunnel -> bundles:// 
internet/host://soltek/fred (12 bytes payload) from pending list and  
persistent store
[1122726726.003476 /bundle/actions debug] removing bundle 22 from  
data store
[1122726726.003845 /bundle/mapping debug] bundle id 22 del_bundle:  
deleting mapping [pending_bundles]
[1122726726.003867 /bundle/refs debug] bundle id 22: refcount 3 -> 2  
(0 mappings) del bundle_list pending_bundles
[1122726726.003880 /route/static debug] dispatching event BUNDLE_EXPIRED
[1122726726.003891 /bundle/refs debug] bundle id 22: refcount 2 -> 1  
(0 mappings) del BundleExpiredEvent
[1122726726.003941 /bundle/daemon debug] dispatching event  
BUNDLE_TRANSMITTED
[1122726726.003952 /bundle/daemon info] BUNDLE_TRANSMITTED id:22 (12  
bytes) ACKED -> bundles://internet/host://soltek/fred
[1122726726.003963 /bundle/daemon debug] removing bundle bundle id 22  
bundles://internet/host://ibook12.dyndns.org/dtntunnel -> bundles:// 
internet/host://soltek/fred (12 bytes payload) from pending list and  
persistent store
[1122726726.003975 /bundle/actions debug] removing bundle 22 from  
data store
[1122726726.004003 /storage/bundles error] del bundle 22: bundle  
doesn't exist
[1122726726.004017 /bundle/daemon error] unexpected error removing  
bundle from pending list
[1122726726.004027 /route/static debug] dispatching event  
BUNDLE_TRANSMITTED
[1122726726.004038 /bundle/refs debug] bundle id 22: refcount 1 -> 0  
(0 mappings) del BundleTransmittedEvent
[1122726726.004049 /bundle debug] bundle id 22: no more references,  
deleting bundle

On 30 Jul 2005, at 12:16, Darren Long wrote:
> 2) dtnd fails an assertion when confused by bundle expirations  
> during inter-node pinging.  It actually makes for a fun game, like  
> "pass the hot potatoe", wondering which dtnd will get nailed ;-)   
> Most fun can be  had as it tries to delete a bundle after  
> transmission, which had jus expired.

To: [email-masked]
From: Darren Long <[email-masked]>
Date: Mon, 1 Aug 2005 18:33:42 +0100
Subject: [dtn-users] Problems with DTN from CVS (3 of 3 resent)
Sender: [email-masked]
Reply-To: [email-masked]

--Apple-Mail-1-729017857
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
	charset=US-ASCII;
	delsp=yes;
	format=flowed

[Trimmed 3 of 3]

3) Unit test bundle-list-test run-time seg fault on Mac OS X 10.4.2  
(Tiger) as previously reported.
On linux, FC4, this whole test runs ok, with gcc version as above.   
On Tiger, it segfaults.
gcc version 4.0.0 20041026 (Apple Computer, Inc. build 4061)

Tiger
MultipleLists...
[1122587949.901898 /bundle/refs debug] bundle id 0: refcount 1 -> 2  
(0 mappings) add bundle_list list1
[1122587949.901974 /bundle/mapping debug] bundle id 0 add mapping  
[list1]
[1122587949.902057 /bundle/refs debug] bundle id 0: refcount 2 -> 3  
(1 mappings) add bundle_list list2
<snip>
[1122587949.906137 /bundle/refs debug] bundle id 9: refcount 2 -> 3  
(1 mappings) add bundle_list list2
[1122587949.906211 /bundle/mapping debug] bundle id 9 add mapping  
[list2]
[1122587949.906287 /bundle/refs debug] bundle id 9: refcount 3 -> 4  
(2 mappings) add bundle_list list3
[1122587949.906398 /bundle/mapping debug] bundle id 9 add mapping  
[list3]
[1122587949.906472 /test debug] CHECK 'b->num_mappings()' (3) == '3' (3)
[1122587949.906607 /test debug] CHECK (l->contains(b)) ok
[1122587949.906889 /test debug] CHECK (l->contains(b)) ok
[1122587949.906984 /test debug] CHECK (l->contains(b)) ok
[1122587949.907048 /test critical] CHECK FAILED: 'b->num_mappings 
()' (3) != '0' (0) at unit_tests/bundle-list-test.cc:193
MultipleLists... Failed
MultipleListRemoval...
[1122587949.907236 /test debug] CHECK 'b->num_mappings()' (3) == '3' (3)
[1122587949.907313 /test debug] CHECK (l->contains(b)) ok
[1122587949.907383 /bundle/mapping debug] bundle id 7 del_bundle:  
deleting mapping [list1]
[1122587949.907507 /bundle/refs debug] bundle id 7: refcount 4 -> 3  
(2 mappings) del bundle_list list1
[1122587949.907925 /test debug] CHECK (l->erase(b)) ok
[1122587949.908018 /test debug] CHECK (! l->contains(b)) ok
Segmentation fault

Heres the code:

DECLARE_TEST(MultipleLists) {
     Bundle* b;
     BundleList* l;

     for (int i = 0; i < COUNT; ++i) {
         l1->push_back(bundles[i]);

         if ((i % 2) == 0) {
             l2->push_back(bundles[i]);
         } else {
             l2->push_front(bundles[i]);
         }

         if ((i % 3) == 0) {
             l3->push_back(bundles[i]);
         } else if ((i % 3) == 1) {
             l3->push_front(bundles[i]);
         }
     }

     b = bundles[0];
     CHECK_EQUAL(b->num_mappings(), 3);
     b->lock_.lock();
     for (map_iter = b->mappings_begin();
          map_iter != b->mappings_end();
          ++map_iter)
     {
         l = *map_iter;
         CHECK(l->contains(b));
     }

     for (map_iter = b->mappings_begin();
          map_iter != b->mappings_end();
          ++map_iter) ************************************ seg faults  
in here
     {
         l = *map_iter;
         CHECK(l->erase(b));
         CHECK(! l->contains(b));
     }

     b->lock_.unlock();
     CHECK_EQUAL(b->num_mappings(), 0);

     // list contents fall through to next test
     return UNIT_TEST_PASSED;
}

next up the call stack is

std::_Rb_tree_const_iterator<dtn::BundleList*>::operator++ at  
stl_tree.h:261

        _Self
       operator++(int)
       {
     _Self __tmp = *this;
     _M_node = _Rb_tree_increment(_M_node);
     return __tmp;
       }

 From there on up its into PowerPC assembler, which I haven't quite  
got my head round yet.  I haven't stopped laughing since discovering  
the eieio instruction. I haven't figured out the cause of this.

Darren

--Apple-Mail-1-729017857
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=ISO-8859-1

<HTML><BODY style=3D"word-wrap: break-word; -khtml-nbsp-mode: space; =
-khtml-line-break: after-white-space; "><DIV>[Trimmed 3 of =
3]</DIV><DIV><BR class=3D"khtml-block-placeholder"></DIV><DIV>3) Unit =
test bundle-list-test run-time seg fault on Mac OS X 10.4.2 (Tiger) as =
previously reported.</DIV><DIV>On linux, FC4, this whole test runs ok, =
with gcc version as above.=A0=A0On Tiger, it segfaults.=A0</DIV><DIV>gcc =
version 4.0.0 20041026 (Apple Computer, Inc. build 4061)</DIV><DIV><BR =
class=3D"khtml-block-placeholder"></DIV><DIV>Tiger</DIV><DIV>MultipleLists=
...</DIV><DIV>[1122587949.901898 /bundle/refs debug] bundle id 0: =
refcount 1 -&gt; 2 (0 mappings) add bundle_list =
list1</DIV><DIV>[1122587949.901974 /bundle/mapping debug] bundle id 0 =
add mapping [list1]</DIV><DIV>[1122587949.902057 /bundle/refs debug] =
bundle id 0: refcount 2 -&gt; 3 (1 mappings) add bundle_list =
list2</DIV><DIV>&lt;snip&gt;</DIV><DIV>[1122587949.906137 /bundle/refs =
debug] bundle id 9: refcount 2 -&gt; 3 (1 mappings) add bundle_list =
list2</DIV><DIV>[1122587949.906211 /bundle/mapping debug] bundle id 9 =
add mapping [list2]</DIV><DIV>[1122587949.906287 /bundle/refs debug] =
bundle id 9: refcount 3 -&gt; 4 (2 mappings) add bundle_list =
list3</DIV><DIV>[1122587949.906398 /bundle/mapping debug] bundle id 9 =
add mapping [list3]</DIV><DIV>[1122587949.906472 /test debug] CHECK =
'b-&gt;num_mappings()' (3) =3D=3D '3' (3)</DIV><DIV>[1122587949.906607 =
/test debug] CHECK (l-&gt;contains(b)) ok</DIV><DIV>[1122587949.906889 =
/test debug] CHECK (l-&gt;contains(b)) ok</DIV><DIV>[1122587949.906984 =
/test debug] CHECK (l-&gt;contains(b)) ok</DIV><DIV>[1122587949.907048 =
/test critical] CHECK FAILED: 'b-&gt;num_mappings()' (3) !=3D '0' (0) at =
unit_tests/bundle-list-test.cc:193</DIV><DIV>MultipleLists... =
Failed</DIV><DIV>MultipleListRemoval...</DIV><DIV>[1122587949.907236 =
/test debug] CHECK 'b-&gt;num_mappings()' (3) =3D=3D '3' =
(3)</DIV><DIV>[1122587949.907313 /test debug] CHECK (l-&gt;contains(b)) =
ok</DIV><DIV>[1122587949.907383 /bundle/mapping debug] bundle id 7 =
del_bundle: deleting mapping [list1]</DIV><DIV>[1122587949.907507 =
/bundle/refs debug] bundle id 7: refcount 4 -&gt; 3 (2 mappings) del =
bundle_list list1</DIV><DIV>[1122587949.907925 /test debug] CHECK =
(l-&gt;erase(b)) ok</DIV><DIV>[1122587949.908018 /test debug] CHECK (! =
l-&gt;contains(b)) ok</DIV><DIV>Segmentation fault</DIV><DIV><BR =
class=3D"khtml-block-placeholder"></DIV><DIV><BR =
class=3D"khtml-block-placeholder"></DIV><DIV>Heres the =
code:</DIV><DIV><BR class=3D"khtml-block-placeholder"></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">DECLARE_TEST(MultipleLists) {</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">Bundle* b;</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; =
margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">BundleList* l;</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; =
margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: =
14px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=A0 =A0<BR =
class=3D"khtml-block-placeholder"></SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#760F50" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">for</SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;"> =
(</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#760F50" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">int</SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;"> i =3D =
</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#0000FF" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">0</SPAN></FONT><FONT class=3D"Apple-style-span"=
 face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">; i &lt; COUNT; ++i) =
{</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; =
margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 </SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">l1-&gt;push_back(bundles[i]);</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; font: normal normal normal 12px/normal Monaco; =
min-height: 16px; "><BR style=3D""></DIV><DIV style=3D"margin-top: 0px; =
margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#760F50" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">if</SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;"> ((i % =
</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#0000FF" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">2</SPAN></FONT><FONT class=3D"Apple-style-span"=
 face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">) =3D=3D </SPAN></FONT><FONT =
class=3D"Apple-style-span" color=3D"#0000FF" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">0</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">) =
{</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; =
margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">l2-&gt;push_back(bundles[i]);</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 =A0 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">} </SPAN></FONT><FONT =
class=3D"Apple-style-span" color=3D"#760F50" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">else</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;"> =
{</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; =
margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">l2-&gt;push_front(bundles[i]);</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 =A0 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">}</SPAN></FONT></DIV><DIV style=3D"margin-top: =
0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: =
normal normal normal 12px/normal Monaco; min-height: 16px; "><BR =
style=3D""></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; =
margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 </SPAN></FONT><FONT =
class=3D"Apple-style-span" color=3D"#760F50" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">if</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;"> =
((i % </SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#0000FF" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">3</SPAN></FONT><FONT class=3D"Apple-style-span"=
 face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">) =3D=3D </SPAN></FONT><FONT =
class=3D"Apple-style-span" color=3D"#0000FF" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">0</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">) =
{</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; =
margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">l3-&gt;push_back(bundles[i]);</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 =A0 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">} </SPAN></FONT><FONT =
class=3D"Apple-style-span" color=3D"#760F50" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">else</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;"> =
</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#760F50" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">if</SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;"> ((i % =
</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#0000FF" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">3</SPAN></FONT><FONT class=3D"Apple-style-span"=
 face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">) =3D=3D </SPAN></FONT><FONT =
class=3D"Apple-style-span" color=3D"#0000FF" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">1</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">) =
{</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; =
margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 =A0 =A0 </SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">l3-&gt;push_front(bundles[i]);</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 =A0 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">}</SPAN></FONT></DIV><DIV style=3D"margin-top: =
0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">}</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal =
12px/normal Monaco; min-height: 16px; "><BR style=3D""></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">b =
=3D bundles[</SPAN></FONT><FONT class=3D"Apple-style-span" =
color=3D"#0000FF" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">0</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">];</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; =
margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">CHECK_EQUAL(b-&gt;num_mappings(), </SPAN></FONT><FONT =
class=3D"Apple-style-span" color=3D"#0000FF" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">3</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">);</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; =
margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">b-&gt;lock_.lock();</SPAN></FONT></DIV><DIV style=3D"margin-top: =
0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#760F50" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">for</SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;"> (map_iter =3D =
b-&gt;mappings_begin();</SPAN></FONT></DIV><DIV style=3D"margin-top: =
0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=A0 =A0 =A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">map_iter !=3D b-&gt;mappings_end();</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">=A0=A0 =A0 =A0 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">++map_iter)</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">{</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">l =
=3D *map_iter;</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; =
margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">CHECK(l-&gt;contains(b));</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">}</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=A0 =A0<BR =
class=3D"khtml-block-placeholder"></SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#760F50" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">for</SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;"> (map_iter =3D =
b-&gt;mappings_begin();</SPAN></FONT></DIV><DIV style=3D"margin-top: =
0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=A0 =A0 =A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">map_iter !=3D b-&gt;mappings_end();</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">=A0=A0 =A0 =A0 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">++map_iter) =
************************************ seg faults in =
here</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">{</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">l =
=3D *map_iter;</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; =
margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">CHECK(l-&gt;erase(b));</SPAN></FONT></DIV><DIV style=3D"margin-top:=
 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">CHECK(! l-&gt;contains(b));</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">}</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal =
12px/normal Monaco; min-height: 16px; "><BR style=3D""></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">b-&gt;lock_.unlock();</SPAN></FONT></DIV><DIV style=3D"margin-top: =
0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">CHECK_EQUAL(b-&gt;num_mappings(), </SPAN></FONT><FONT =
class=3D"Apple-style-span" color=3D"#0000FF" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">0</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">);</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; =
margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal =
normal normal 12px/normal Monaco; min-height: 16px; "><BR =
style=3D""></DIV><DIV style=3D"margin-top: 0px; margin-right: 0px; =
margin-bottom: 0px; margin-left: 0px; "><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">=A0 =A0 </SPAN></FONT><FONT =
class=3D"Apple-style-span" color=3D"#236E25" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">// list contents fall through to next =
test</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#760F50" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">return</SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;"> =
UNIT_TEST_PASSED;</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; =
margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">}</SPAN></FONT></DIV><DIV><BR =
class=3D"khtml-block-placeholder"></DIV><DIV>next up the call stack =
is</DIV><DIV><BR =
class=3D"khtml-block-placeholder"></DIV><DIV>std::_Rb_tree_const_iterator&=
lt;dtn::BundleList*&gt;::operator++ at stl_tree.h:261</DIV><DIV><BR =
class=3D"khtml-block-placeholder"></DIV><DIV>=A0<FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0=A0 =
=A0</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">_Self</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; =
margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#760F50" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">operator</SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">++(</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#760F50"=
 face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">int</SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">)</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0 =A0 =A0 =
</SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">{</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; "><SPAN =
class=3D"Apple-converted-tab"><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">=A0 =A0 </SPAN></FONT></SPAN><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">_Self __tmp =3D =
*</SPAN></FONT><FONT class=3D"Apple-style-span" color=3D"#760F50" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">this</SPAN></FONT><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: =
12px;">;</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; "><SPAN =
class=3D"Apple-converted-tab"><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">=A0 =A0 </SPAN></FONT></SPAN><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;">_M_node =3D =
_Rb_tree_increment(_M_node);</SPAN></FONT></DIV><DIV style=3D"margin-top: =
0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><SPAN =
class=3D"Apple-converted-tab"><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;">=A0 =A0 </SPAN></FONT></SPAN><FONT =
class=3D"Apple-style-span" color=3D"#760F50" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">return</SPAN></FONT><FONT class=3D"Apple-style-span" =
face=3D"Monaco" size=3D"3"><SPAN class=3D"Apple-style-span" =
style=3D"font-size: 12px;"> __tmp;</SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: 12px;">=A0=
 =A0 =A0 </SPAN></FONT><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">}</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;"><BR =
class=3D"khtml-block-placeholder"></SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">=46rom there on up its into PowerPC assembler, which I haven't =
quite got my head round yet.=A0 I haven't stopped laughing since =
discovering the eieio instruction. I haven't figured out the cause of =
this.</SPAN></FONT></DIV><DIV style=3D"margin-top: 0px; margin-right: =
0px; margin-bottom: 0px; margin-left: 0px; "><FONT =
class=3D"Apple-style-span" face=3D"Monaco" size=3D"3"><SPAN =
class=3D"Apple-style-span" style=3D"font-size: 12px;"><BR =
class=3D"khtml-block-placeholder"></SPAN></FONT></DIV><DIV =
style=3D"margin-top: 0px; margin-right: 0px; margin-bottom: 0px; =
margin-left: 0px; "><FONT class=3D"Apple-style-span" face=3D"Monaco" =
size=3D"3"><SPAN class=3D"Apple-style-span" style=3D"font-size: =
12px;">Darren</SPAN></FONT></DIV><DIV><BR =
class=3D"khtml-block-placeholder"></DIV><DIV><BR><BR><BR =
class=3D"khtml-block-placeholder"></DIV></BODY></HTML>=

--Apple-Mail-1-729017857--