mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-10 12:40:58 +02:00
make the zprof wrapper function be more careful, avoiding almost all of the code when the module is being unloaded (14504)
This commit is contained in:
parent
96fd8a11d3
commit
5fe1924155
2 changed files with 61 additions and 46 deletions
|
@ -1,5 +1,9 @@
|
||||||
2001-05-28 Sven Wischnowsky <wischnow@zsh.org>
|
2001-05-28 Sven Wischnowsky <wischnow@zsh.org>
|
||||||
|
|
||||||
|
* 14504: Src/Modules/zprof.c: make the zprof wrapper function
|
||||||
|
be more careful, avoiding almost all of the code when the
|
||||||
|
module is being unloaded
|
||||||
|
|
||||||
* 14503: Src/exec.c: another attempt at fixing the job problem
|
* 14503: Src/exec.c: another attempt at fixing the job problem
|
||||||
from 14327; make execpline() reset list_pipe_job to zero if it
|
from 14327; make execpline() reset list_pipe_job to zero if it
|
||||||
would be set for a job started in the background
|
would be set for a job started in the background
|
||||||
|
|
|
@ -68,6 +68,7 @@ static int ncalls;
|
||||||
static Parc arcs;
|
static Parc arcs;
|
||||||
static int narcs;
|
static int narcs;
|
||||||
static Sfunc stack;
|
static Sfunc stack;
|
||||||
|
static Module zprof_module;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
freepfuncs(Pfunc f)
|
freepfuncs(Pfunc f)
|
||||||
|
@ -216,6 +217,7 @@ bin_zprof(char *nam, char **args, char *ops, int func)
|
||||||
static int
|
static int
|
||||||
zprof_wrapper(Eprog prog, FuncWrap w, char *name)
|
zprof_wrapper(Eprog prog, FuncWrap w, char *name)
|
||||||
{
|
{
|
||||||
|
int active = 0;
|
||||||
struct sfunc sf, *sp;
|
struct sfunc sf, *sp;
|
||||||
Pfunc f;
|
Pfunc f;
|
||||||
Parc a = NULL;
|
Parc a = NULL;
|
||||||
|
@ -223,6 +225,8 @@ zprof_wrapper(Eprog prog, FuncWrap w, char *name)
|
||||||
struct timezone dummy;
|
struct timezone dummy;
|
||||||
double prev, now;
|
double prev, now;
|
||||||
|
|
||||||
|
if (zprof_module && !(zprof_module->flags & MOD_UNLOAD)) {
|
||||||
|
active = 1;
|
||||||
if (!(f = findpfunc(name))) {
|
if (!(f = findpfunc(name))) {
|
||||||
f = (Pfunc) zalloc(sizeof(*f));
|
f = (Pfunc) zalloc(sizeof(*f));
|
||||||
f->name = ztrdup(name);
|
f->name = ztrdup(name);
|
||||||
|
@ -253,7 +257,10 @@ zprof_wrapper(Eprog prog, FuncWrap w, char *name)
|
||||||
gettimeofday(&tv, &dummy);
|
gettimeofday(&tv, &dummy);
|
||||||
sf.beg = prev = ((((double) tv.tv_sec) * 1000.0) +
|
sf.beg = prev = ((((double) tv.tv_sec) * 1000.0) +
|
||||||
(((double) tv.tv_usec) / 1000.0));
|
(((double) tv.tv_usec) / 1000.0));
|
||||||
|
}
|
||||||
runshfunc(prog, w, name);
|
runshfunc(prog, w, name);
|
||||||
|
if (active) {
|
||||||
|
if (zprof_module && !(zprof_module->flags & MOD_UNLOAD)) {
|
||||||
tv.tv_sec = tv.tv_usec = 0;
|
tv.tv_sec = tv.tv_usec = 0;
|
||||||
gettimeofday(&tv, &dummy);
|
gettimeofday(&tv, &dummy);
|
||||||
|
|
||||||
|
@ -274,6 +281,9 @@ zprof_wrapper(Eprog prog, FuncWrap w, char *name)
|
||||||
if (a)
|
if (a)
|
||||||
a->time += now - prev;
|
a->time += now - prev;
|
||||||
}
|
}
|
||||||
|
} else
|
||||||
|
stack = sf.prev;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,6 +299,7 @@ static struct funcwrap wrapper[] = {
|
||||||
int
|
int
|
||||||
setup_(Module m)
|
setup_(Module m)
|
||||||
{
|
{
|
||||||
|
zprof_module = m;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue