speakup-r empty line lockup

Okash Khawaja okash.khawaja at gmail.com
Tue Aug 22 02:53:03 EDT 2017


Thanks John. Appreciate it.

I'll update here if I make progress.

Cheers,
Okash

On 22 Aug 2017 12:36 am, "John Covici" <covici at ccs.covici.com> wrote:

> OK, tested the patch, no joy with this one either.  Note that a couple
> of thehunks sucedded with a bit of line difference, but that should
> not be of significance.  The procedure I used was to unpatch the
> previous one and then put the new one in, same like I did with the
> previous patch, unpatch old one and put in new one.
>
> On Mon, 21 Aug 2017 15:24:32 -0400,
> Okash Khawaja wrote:
> >
> > [1  <text/plain; us-ascii (7bit)>]
> > Hi,
> >
> > On Mon, Aug 21, 2017 at 12:23:46PM -0400, John Covici wrote:
> > > He rewrote the whole part of the code, adding some new features as
> > > well, so the bug mysteriously went away.
> >
> > I still think the root cause is correct, i.e. interrupt being triggered
> > from its own interrupt handler context. The fix however was too broad.
> > First one changed the behaviour in all cases. Second one from last night
> > narrowed the change to just the interrupt context.
> >
> > If I had right serial synth, I would try the attached patch. This
> > narrows the fix down even further, so that we avoid calling
> > speakup_fake_down_arrow() only when we are in context of
> > keyboard_notifier_call() which is always invoked in interrupt context,
> > in response to a keyboard event.
> >
> > Thanks,
> > Okash
> > [2 speakup-r-fix <text/plain; us-ascii (7bit)>]
> > ---
> >  drivers/staging/speakup/main.c |   15 ++++++++++++---
> >  1 file changed, 12 insertions(+), 3 deletions(-)
> >
> > --- a/drivers/staging/speakup/main.c
> > +++ b/drivers/staging/speakup/main.c
> > @@ -1376,6 +1376,8 @@ static void reset_highlight_buffers(stru
> >
> >  static int read_all_key;
> >
> > +static volatile int in_keyboard_notifier = 0;
> > +
> >  static void start_read_all_timer(struct vc_data *vc, int command);
> >
> >  enum {
> > @@ -1408,7 +1410,10 @@ static void read_all_doc(struct vc_data
> >       cursor_track = read_all_mode;
> >       spk_reset_index_count(0);
> >       if (get_sentence_buf(vc, 0) == -1) {
> > -             kbd_fakekey2(vc, RA_DOWN_ARROW);
> > +             del_timer(&cursor_timer);
> > +             if (!in_keyboard_notifier)
> > +                     speakup_fake_down_arrow();
> > +             start_read_all_timer(vc, RA_DOWN_ARROW);
> >       } else {
> >               say_sentence_num(0, 0);
> >               synth_insert_next_index(0);
> > @@ -2212,8 +2217,10 @@ static int keyboard_notifier_call(struct
> >       int ret = NOTIFY_OK;
> >       static int keycode;     /* to hold the current keycode */
> >
> > +     in_keyboard_notifier = 1;
> > +
> >       if (vc->vc_mode == KD_GRAPHICS)
> > -             return ret;
> > +             goto out;
> >
> >       /*
> >        * First, determine whether we are handling a fake keypress on
> > @@ -2225,7 +2232,7 @@ static int keyboard_notifier_call(struct
> >        */
> >
> >       if (speakup_fake_key_pressed())
> > -             return ret;
> > +             goto out;
> >
> >       switch (code) {
> >       case KBD_KEYCODE:
> > @@ -2266,6 +2273,8 @@ static int keyboard_notifier_call(struct
> >                       break;
> >               }
> >       }
> > +out:
> > +     in_keyboard_notifier = 0;
> >       return ret;
> >  }
> >
>
> --
> Your life is like a penny.  You're going to lose it.  The question is:
> How do
> you spend it?
>
>          John Covici
>          covici at ccs.covici.com
>


More information about the Speakup mailing list