To: vim_dev@googlegroups.com Subject: Patch 8.2.0452 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.0452 Problem: channel_parse_messages() fails when called recursively. Solution: Return for a recursive call. (closes #5835) Files: src/channel.c *** ../vim-8.2.0451/src/channel.c 2020-03-24 20:35:14.741080390 +0100 --- src/channel.c 2020-03-26 15:56:02.939711511 +0100 *************** *** 4428,4441 **** int ret = FALSE; int r; ch_part_T part = PART_SOCK; #ifdef ELAPSED_FUNC elapsed_T start_tv; - - ELAPSED_INIT(start_tv); #endif ++safe_to_invoke_callback; // Only do this message when another message was given, otherwise we get // lots of them. if ((did_repeated_msg & REPEATED_MSG_LOOKING) == 0) --- 4428,4449 ---- int ret = FALSE; int r; ch_part_T part = PART_SOCK; + static int recursive = FALSE; #ifdef ELAPSED_FUNC elapsed_T start_tv; #endif + // The code below may invoke callbacks, which might call us back. + // That doesn't work well, just return without doing anything. + if (recursive) + return FALSE; + recursive = TRUE; ++safe_to_invoke_callback; + #ifdef ELAPSED_FUNC + ELAPSED_INIT(start_tv); + #endif + // Only do this message when another message was given, otherwise we get // lots of them. if ((did_repeated_msg & REPEATED_MSG_LOOKING) == 0) *************** *** 4513,4518 **** --- 4521,4527 ---- } --safe_to_invoke_callback; + recursive = FALSE; return ret; } *** ../vim-8.2.0451/src/version.c 2020-03-26 15:39:50.223238189 +0100 --- src/version.c 2020-03-26 15:56:59.759509505 +0100 *************** *** 740,741 **** --- 740,743 ---- { /* Add new patch number below this line */ + /**/ + 452, /**/ -- Windows M!uqoms /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///