Patch 7.4.1855
Problem:    Valgrind reports memory leak for job that is not freed.
Solution:   Free all jobs on exit.  Add test for failing job.
Files:      src/channel.c, src/misc2.c, src/proto/channel.pro,
            src/testdir/test_partial.vim


*** ../vim-7.4.1854/src/channel.c       2016-05-28 14:16:05.290615005 +0200
--- src/channel.c       2016-05-28 21:10:42.582272798 +0200
***************
*** 1285,1290 ****
--- 1285,1291 ----
      int           len = (int)STRLEN(line);
      char_u  *p;
  
+     /* Need to make a copy to be able to append a NL. */
      if ((p = alloc(len + 2)) == NULL)
        return;
      STRCPY(p, line);
***************
*** 2888,2894 ****
  /*
   * Read from channel "channel" for as long as there is something to read.
   * "part" is PART_SOCK, PART_OUT or PART_ERR.
!  * The data is put in the read queue.
   */
      static void
  channel_read(channel_T *channel, int part, char *func)
--- 2889,2895 ----
  /*
   * Read from channel "channel" for as long as there is something to read.
   * "part" is PART_SOCK, PART_OUT or PART_ERR.
!  * The data is put in the read queue.  No callbacks are invoked here.
   */
      static void
  channel_read(channel_T *channel, int part, char *func)
***************
*** 4184,4189 ****
--- 4185,4199 ----
      }
  }
  
+ #if defined(EXITFREE) || defined(PROTO)
+     void
+ job_free_all(void)
+ {
+     while (first_job != NULL)
+       job_free(first_job);
+ }
+ #endif
+ 
  /*
   * Return TRUE if the job should not be freed yet.  Do not free the job when
   * it has not ended yet and there is a "stoponexit" flag, an exit callback
*** ../vim-7.4.1854/src/misc2.c 2016-03-28 19:16:15.665846533 +0200
--- src/misc2.c 2016-05-28 21:54:49.954236381 +0200
***************
*** 1127,1135 ****
  # ifdef FEAT_DIFF
      diff_clear(curtab);
  # endif
- # ifdef FEAT_JOB_CHANNEL
-     channel_free_all();
- # endif
      clear_sb_text();        /* free any scrollback text */
  
      /* Free some global vars. */
--- 1127,1132 ----
***************
*** 1221,1226 ****
--- 1218,1227 ----
  # ifdef FEAT_EVAL
      eval_clear();
  # endif
+ # ifdef FEAT_JOB_CHANNEL
+     channel_free_all();
+     job_free_all();
+ # endif
  
      free_termoptions();
  
*** ../vim-7.4.1854/src/proto/channel.pro       2016-05-09 20:38:48.580112142 
+0200
--- src/proto/channel.pro       2016-05-28 21:56:12.034235252 +0200
***************
*** 50,55 ****
--- 50,56 ----
  void free_job_options(jobopt_T *opt);
  int get_job_options(typval_T *tv, jobopt_T *opt, int supported);
  channel_T *get_channel_arg(typval_T *tv, int check_open, int reading, int 
part);
+ void job_free_all(void);
  int set_ref_in_job(int copyID);
  void job_unref(job_T *job);
  int free_unused_jobs_contents(int copyID, int mask);
*** ../vim-7.4.1854/src/testdir/test_partial.vim        2016-05-24 
22:29:45.038961566 +0200
--- src/testdir/test_partial.vim        2016-05-28 22:17:17.030217851 +0200
***************
*** 250,255 ****
--- 250,269 ----
    endif
  endfunc
  
+ func Test_job_start_fails()
+   if has('job')
+     let job = job_start('axdfxsdf')
+     for i in range(100)
+       if job_status(job) == 'dead'
+       break
+       endif
+       sleep 10m
+     endfor
+     call assert_equal('dead', job_status(job))
+     unlet job
+   endif
+ endfunc
+ 
  func Test_ref_job_partial_dict()
    if has('job')
      let g:ref_job = job_start('echo')
*** ../vim-7.4.1854/src/version.c       2016-05-28 15:53:45.874534388 +0200
--- src/version.c       2016-05-28 22:17:58.406217282 +0200
***************
*** 755,756 ****
--- 755,758 ----
  {   /* Add new patch number below this line */
+ /**/
+     1855,
  /**/

-- 
How To Keep A Healthy Level Of Insanity:
2. Page yourself over the intercom. Don't disguise your voice.

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui