On 6/1/2024 7:56 am, Peter Dufault wrote: >> On Jan 5, 2024, at 1:36 PM, Peter Dufault <dufa...@hda.com> wrote: >> >> I "#if 0"d out the call to "rtems_shell_term_row_column_swapped()" that >> checks for a broken "tmux" terminal. That is what sends "\033[>0q" to the >> console. I no longer see "0q" on the console but there is still a long >> pause before the command is executed. >> >> Does it make sense to check the shell's terminal for its size before >> executing every command? It could be checked once, or the check could be >> moved into its own command. Now the shell checks for the terminal size and >> if it is a "tmux" terminal before it calls every command. >> >> The escape sequence does work on gnome-terminal, so I'm not sure what causes >> the delay. I can investigate that, but question if this >> should be done in the shell. > > There's a bug detecting the timeout in rtems_shell_term_wait_for(). It does > this: > > int msec = 150; > while (msec-- > 0 && str[i] != '\0') { > /* Do stuff. */ > if (nothing_arrived()) { > usleep(1000); > } > } > > if (msec == 0) { > /* BUG when we broke from the loop due to time out msec is -1, not 0. */ > } > > so if nothing comes in it treats it like it found a match, and for some > reason nothing is coming in. > > The "telnetd01" test I'm running doesn't set CONFIGURE_MICROSECONDS_PER_TICK > so I think the default is 10000 us. That means we call usleep(1000) 150 > times when no data arrives. If usleep() delays for one clock tick then that > is 150 * .01 or 1.5 seconds. Since the code times out twice that's three > seconds. Actually it used to timeout in 4.5 seconds before I disabled the > call to rtems_shell_term_row_column_swapped() - that function is called even > when the calls to get the lines and columns fails. > > I changed the code to use VTIME of 1 (1/10 second, or 100 msec) instead of 0. > That lets TERMIOS do the character arrival timeout instead of using a delay > in a loop that resets - essentially duplicating VTIME != 0 VMIN == 0. Once I > did that it times out as I expect in .1 seconds.
Thanks for investigating this and finding a solution. Are you able to post a patch? > I don't know WHY no characters arrive but I know why it has a long delay. The 150msec timeout is needed when accessing remote devices on the other side of the world but it should be 1/10 of a second and then the shall moves on. The process is only done when the command prompt is painted so it should not normally be noticeable. Chris _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel