Patch 8.1.0130
Problem:    ":profdel func" does not work if func was called already.
            (Dominique Pelle)
Solution:   Reset uf_profiling and add a flag to indicate initialization was
            done.
Files:      src/structs.h, src/userfunc.c


*** ../vim-8.1.0129/src/structs.h       2018-06-23 19:22:45.614486258 +0200
--- src/structs.h       2018-06-30 18:12:48.678664711 +0200
***************
*** 1345,1350 ****
--- 1345,1351 ----
      garray_T  uf_lines;       /* function lines */
  #ifdef FEAT_PROFILE
      int               uf_profiling;   /* TRUE when func is being profiled */
+     int               uf_prof_initialized;
      /* profiling the function as a whole */
      int               uf_tm_count;    /* nr of calls */
      proftime_T        uf_tm_total;    /* time spent in function + children */
*** ../vim-8.1.0129/src/userfunc.c      2018-05-22 18:31:30.001365739 +0200
--- src/userfunc.c      2018-06-30 18:20:15.704075693 +0200
***************
*** 293,302 ****
            fp->uf_scoped = NULL;
  
  #ifdef FEAT_PROFILE
-       fp->uf_tml_count = NULL;
-       fp->uf_tml_total = NULL;
-       fp->uf_tml_self = NULL;
-       fp->uf_profiling = FALSE;
        if (prof_def_func())
            func_do_profile(fp);
  #endif
--- 293,298 ----
***************
*** 706,711 ****
--- 702,708 ----
  #ifdef FEAT_PROFILE
      proftime_T        wait_start;
      proftime_T        call_start;
+     int               started_profiling = FALSE;
  #endif
  
      /* If depth of calling is getting too high, don't execute the function */
***************
*** 921,927 ****
--- 918,927 ----
      if (do_profiling == PROF_YES)
      {
        if (!fp->uf_profiling && has_profiling(FALSE, fp->uf_name, NULL))
+       {
+           started_profiling = TRUE;
            func_do_profile(fp);
+       }
        if (fp->uf_profiling
                    || (fc->caller != NULL && fc->caller->func->uf_profiling))
        {
***************
*** 965,970 ****
--- 965,973 ----
            profile_add(&fc->caller->func->uf_tm_children, &call_start);
            profile_add(&fc->caller->func->uf_tml_children, &call_start);
        }
+       if (started_profiling)
+           // make a ":profdel func" stop profiling the function
+           fp->uf_profiling = FALSE;
      }
  #endif
  
***************
*** 2522,2544 ****
  {
      int               len = fp->uf_lines.ga_len;
  
!     if (len == 0)
!       len = 1;  /* avoid getting error for allocating zero bytes */
!     fp->uf_tm_count = 0;
!     profile_zero(&fp->uf_tm_self);
!     profile_zero(&fp->uf_tm_total);
!     if (fp->uf_tml_count == NULL)
!       fp->uf_tml_count = (int *)alloc_clear((unsigned) (sizeof(int) * len));
!     if (fp->uf_tml_total == NULL)
!       fp->uf_tml_total = (proftime_T *)alloc_clear((unsigned)
!                                                 (sizeof(proftime_T) * len));
!     if (fp->uf_tml_self == NULL)
!       fp->uf_tml_self = (proftime_T *)alloc_clear((unsigned)
!                                                 (sizeof(proftime_T) * len));
!     fp->uf_tml_idx = -1;
!     if (fp->uf_tml_count == NULL || fp->uf_tml_total == NULL
!                                                  || fp->uf_tml_self == NULL)
!       return;     /* out of memory */
  
      fp->uf_profiling = TRUE;
  }
--- 2525,2552 ----
  {
      int               len = fp->uf_lines.ga_len;
  
!     if (!fp->uf_prof_initialized)
!     {
!       if (len == 0)
!           len = 1;  /* avoid getting error for allocating zero bytes */
!       fp->uf_tm_count = 0;
!       profile_zero(&fp->uf_tm_self);
!       profile_zero(&fp->uf_tm_total);
!       if (fp->uf_tml_count == NULL)
!           fp->uf_tml_count = (int *)alloc_clear(
!                                              (unsigned)(sizeof(int) * len));
!       if (fp->uf_tml_total == NULL)
!           fp->uf_tml_total = (proftime_T *)alloc_clear(
!                                        (unsigned)(sizeof(proftime_T) * len));
!       if (fp->uf_tml_self == NULL)
!           fp->uf_tml_self = (proftime_T *)alloc_clear(
!                                        (unsigned)(sizeof(proftime_T) * len));
!       fp->uf_tml_idx = -1;
!       if (fp->uf_tml_count == NULL || fp->uf_tml_total == NULL
!                                                   || fp->uf_tml_self == NULL)
!           return;         /* out of memory */
!       fp->uf_prof_initialized = TRUE;
!     }
  
      fp->uf_profiling = TRUE;
  }
***************
*** 2568,2574 ****
        {
            --todo;
            fp = HI2UF(hi);
!           if (fp->uf_profiling)
            {
                if (sorttab != NULL)
                    sorttab[st_len++] = fp;
--- 2576,2582 ----
        {
            --todo;
            fp = HI2UF(hi);
!           if (fp->uf_prof_initialized)
            {
                if (sorttab != NULL)
                    sorttab[st_len++] = fp;
*** ../vim-8.1.0129/src/version.c       2018-06-30 17:09:23.039956879 +0200
--- src/version.c       2018-06-30 18:12:14.990860555 +0200
***************
*** 791,792 ****
--- 791,794 ----
  {   /* Add new patch number below this line */
+ /**/
+     130,
  /**/


-- 
hundred-and-one symptoms of being an internet addict:
149. You find your computer sexier than your girlfriend

 /// 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