silc-client: handle prompt abort better
[silc.git] / apps / irssi / src / silc / core / clientutil.c
index 9717d393519a2e2ce4c691159cd93fd2ade629e6..0daceefff530e2952e227223e0271abc90067985 100644 (file)
@@ -4,7 +4,7 @@
 
   Author: Pekka Riikonen <priikone@silcnet.org>
 
-  Copyright (C) 1997 - 2006, 2008 Pekka Riikonen
+  Copyright (C) 1997 - 2014 Pekka Riikonen
 
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -411,6 +411,14 @@ static void silc_keyboard_entry_redirect_abort(SilcAsyncOperation op,
    * the operation has been aborted.
    */
   ctx->user_prompt_proc(NULL, ctx->user_context, KeyboardCompletionAborted);
+
+  /*
+   * Allow new prompt after we've abored despite us leaking Irssi prompt
+   * data.  It's more important to get new prompt up and this abort
+   * guarantees we handle things correctly towards silcclient library by
+   * calling the callback above.
+   */
+  silc_keyboard_prompt_pending = FALSE;
 }
 
 static void silc_keyboard_entry_redirect_completion(const char *line,
@@ -545,7 +553,8 @@ SilcBool silc_keyboard_entry_redirect(SILC_KEYBOARD_PROMPT_PROC prompt_func,
    * assuming that it doesn't as there's already many other things that seem
    * to make this assumption.
    */
-  *async = ctx->async_context;
+  if (async)
+    *async = ctx->async_context;
 
   /*
    * All done.  Irssi will invoke the callback on this thread at a later point