Consider the following testing arrangement (posix shell):
------
tty=$(tty)
input() {
sleep 1 printf "getpin\n" sleep 10 printf "getpin\n" sleep 10
}
input | pinentry-gtk-2 -T "$tty" -o 5
When the first password prompt appears, i enter a junk password like "abc" and
hit enter.
The second password prompt never appears, and pinentry-gtk-2 claims instead:
ERR 83886179 canceled
Trying the same thing on pinentry-curses or pinentry-qt4 or even pinentry-gtk-2
with $DISPLAY unset does not have this misbehavior, so i assume it's something
about the state of the GTK dialog that is causing the second GETPIN to terminate
early.
Also, if the first "sleep 10" is reduced to 4 (less than the timeout "-o 5")
then the second prompt displays as expected (but has a much shorter timeout).