# HG changeset patch # User bears # Date 1035543897 -3600 # Node ID b3a2f710fe2ca9e9a5987c9830dc1c6ca397dc7a # Parent f049f8639dc0783bfad776dfe3afdd214c115e6a [svn] * src/server.c: Fix post 1.0 bug where the article cursor was lost if the server yielded the lock to another server. diff -r f049f8639dc0 -r b3a2f710fe2c ChangeLog --- a/ChangeLog Tue Oct 08 14:52:52 2002 +0100 +++ b/ChangeLog Fri Oct 25 12:04:57 2002 +0100 @@ -1,3 +1,8 @@ +Tue Oct 25 2002 Jim Hague + +* src/server.c: Fix post 1.0 bug where the article cursor was lost if the + server yielded the lock to another server. + Tue Oct 8 2002 Jim Hague * src/client.c: Fix old bug in readField() where the last field in a line diff -r f049f8639dc0 -r b3a2f710fe2c src/server.c --- a/src/server.c Tue Oct 08 14:52:52 2002 +0100 +++ b/src/server.c Fri Oct 25 12:04:57 2002 +0100 @@ -1,7 +1,7 @@ /* server.c - $Id: server.c 396 2002-08-05 22:05:02Z bears $ + $Id: server.c 401 2002-10-25 11:04:57Z bears $ */ #if HAVE_CONFIG_H @@ -314,13 +314,32 @@ } static void -changeToGrp( const char *grp ) +loadGrpInfo( const char *grp ) { checkNewArts( grp ); Utl_cpyStr( server.grp, grp ); readCont( grp ); + + /* + * This routine is used to change back to a group after releasing + * the lock. We need to preserve the group cursor if at all possible. + * So, if the article pointer points to an article before or after + * the current range, adjust it to the first/last article. Otherwise + * leave it well alone. + */ + if ( server.artPtr < Cont_first() ) + server.artPtr = Cont_first(); + else if ( server.artPtr > Cont_last() ) + server.artPtr = Cont_last(); + + server.groupReady = TRUE; +} + +static void +changeToGrp( const char *grp ) +{ + loadGrpInfo( grp ); server.artPtr = Cont_first(); - server.groupReady = TRUE; } static Bool @@ -370,7 +389,7 @@ if ( ! server.groupReady ) { Utl_cpyStr( group, server.grp ); - changeToGrp( group ); + loadGrpInfo( group ); } return TRUE; }