[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [coldsync-hackers] 3.0-pre3: serial comm problems - FIXED
- To: Alessandro Zummo <azummo at towertech dot it>
 
- Subject: Re: [coldsync-hackers] 3.0-pre3: serial comm problems - FIXED
 
- From: Christophe Beauregard <christophe dot beauregard at sympatico.ca>
 
- Date: Sat, 17 May 2003 10:22:14 -0400
 
- Cc: coldsync-hackers at lusars dot net, bugs at coldsync dot org
 
- In-reply-to: <20030517131539.4af1cbca.azummo@towertech.it>
 
- References: <200305152312.20588.christophe.beauregard@sympatico.ca> <200305162201.53213.christophe.beauregard@sympatico.ca> <20030517131539.4af1cbca.azummo@towertech.it>
 
- Reply-to: coldsync-hackers at lusars dot net
 
- Sender: owner-coldsync-hackers at lusars dot net
 
- User-agent: KMail/1.4.3
 
On Saturday 17 May 2003 07:15, Alessandro Zummo wrote:
> Christophe Beauregard <christophe.beauregard@sympatico.ca> wrote:
> > A better fix probably involves cleaning up how connection status is
> > tracked and ensuring it's actually used in places where it's
> > relevant... I'd imagine this would be sometime _before_ the disconnect
> > phase.
>
> I've attached a possible patch, please let me know your opinion. I'll
> appreciate every suggestion, the connection/error tracking subsystem
> doesn't always work properly.
I noticed.
Actually, I found the code very clean and the tracing framework is just 
lovely... All the different layers are fairly cleanly separated from each 
other enough that I was able to get into it with no prior knowledge of the 
program and fix the problem in just a few hours. That gets high marks in my 
book.
There is one minor problem with your patch... It was actually in the 
original code, not just your patch. I noticed it while I was debugging and 
forgot to mention it:
@@ -349,7 +364,9 @@
 int
 PConn_isonline(PConnection *p)
 {
-	return p->status & PCONNSTAT_UP;
+	pconn_stat status = PConn_get_status(p);
+
+	return (status & PCONNSTAT_UP) ? 1 : 0;
 }
PCONNSTAT_* is an enumerated type, not a bitmask. 
PCONNSTAT_CLOSED&PCONNSTAT_UP evaluates to true. Try:
+	return (status == PCONNSTAT_UP) ? 1 : 0;
Otherwise, it handles the status changes a whole lot better.
Your patch unfortunately doesn't address the problem that the status is 
essentially ignored by everything until sometime after it's too late. I 
suspect that this bug would never have lived as long as it did if a few 
PConn_inonline() calls happened _during_ the sync process rather than 
during the teardown.
I'm not sure the best place to check. Maybe the dlp_ layer could throw 
errors when called on any connection that isn't in the UP state? I don't 
know enough about the connection initialization process to say if this can 
be done cleanly (I assume that connection setup is done on a connection 
that isn't UP, right? Is dlp used, or just a lower layer like padp?)
c.
-- 
This message was sent through the coldsync-hackers mailing list.  To remove
yourself from this mailing list, send a message to majordomo@thedotin.net
with the words "unsubscribe coldsync-hackers" in the message body.  For more
information on Coldsync, send mail to coldsync-hackers-owner@thedotin.net.