Ticket #377 (new defect)

Opened 11 years ago

Last modified 11 years ago

^C confuses discuss in the middle of a too-long listing

Reported by: geofft Owned by:
Priority: insignificant Milestone: The Distant Future
Component: -- Keywords:
Cc: Fixed in version:
Upstream bug:

Description

^Cdiscuss (list): Interrupted system call Can't read transaction info
discuss:  ls 67800:67950
discuss (list): Unknown code HFU3 32 Can't get meeting info
discuss:  q

(discuss hangs at this point)

Change History

comment:1 Changed 11 years ago by ghudson

This is a very old bug, and is not trivial to fix. My recollection (from ~13 years ago) is that when you press C, the code longjmp()s back into the command handler loop. The connection state could be arbitrarily bad at this point, but the main practical problem comes when you're in the middle of a listing or message, and therefore have a bunch of pending data to receive before the response to the next command.

The fix is either to:

  • Fix the broken architecture, and handle C without using longjmp. A SIGINT should probably set a global flag, which should be checked periodically by the code. Since there's no way in the protocol to abort a long operation, the connection should be severed and reopened if the interrupt flag is detected. (This raises the possibility of an authentication error if tickets have expired, but there's no better way.)
  • Preserve the broken architecture, but sever and reopen the connection after the longjmp. (Same caveats as above, that reopening the connection might fail.)

comment:2 Changed 11 years ago by jdreed

  • Priority changed from low to insignificant
  • Milestone set to The Distant Future
Note: See TracTickets for help on using tickets.