From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by befuddled.reisers.ca (Postfix, from userid 65534) id 20EED1EFB3B; Mon, 21 Aug 2017 19:36:35 -0400 (EDT) Received: from a2-out-001.smtp25.com (a2-out-001.smtp25.com [50.201.66.168]) by befuddled.reisers.ca (Postfix) with ESMTPS id 5304A1EFB0C for ; Mon, 21 Aug 2017 19:36:33 -0400 (EDT) Received: from ccs.covici.com (localhost [127.0.0.1]) by ccs.covici.com (8.14.9/8.14.8) with ESMTP id v7LNaS6W008476 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 21 Aug 2017 19:36:28 -0400 Received: (from covici@localhost) by ccs.covici.com (8.14.9/8.13.7/Submit) id v7LNaPrn008297; Mon, 21 Aug 2017 19:36:25 -0400 Date: Mon, 21 Aug 2017 19:36:25 -0400 Message-ID: From: John Covici To: Okash Khawaja Cc: "Speakup is a screen review system for Linux." , Samuel Thibault Subject: Re: speakup-r empty line lockup In-Reply-To: <20170821192432.GA411@sanghar> References: <5411AE16-4310-4AB6-B868-72EBD677540B@gmail.com> <20170818231139.goeokriw7xsrhbm7@var.youpi.perso.aquilenet.fr> <20170820100347.GA1064@sanghar> <20170821144920.GG13793@rednote.net> <20170821160525.vtszuoewe73tpx3y@var.youpi.perso.aquilenet.fr> <20170821192432.GA411@sanghar> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM/1.14.9 (=?ISO-8859-4?Q?Goj=F2?=) APEL/10.8 EasyPG/1.0.0 Emacs/25.2 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) Reply-To: covici@ccs.covici.com Organization: Covici Computer Systems MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-SpamH-Filter: a2-out-001.smtp25.com-v7LNaSB4021891 X-SpamH-OriginatingIP: 70.109.53.110 X-MIMEDefang-Relay-ca7e395729062400c36e9cbcb508575aec105509: 70.109.53.110 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 X-BeenThere: speakup@linux-speakup.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Speakup is a screen review system for Linux." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Aug 2017 23:36:35 -0000 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 ] > 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 ] > --- > 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@ccs.covici.com