Skip to content

Commit

Permalink
profilers: specific message for disabled profilers
Browse files Browse the repository at this point in the history
  • Loading branch information
ligurio committed Feb 11, 2025
1 parent 8e82ff7 commit e781bfb
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 2 deletions.
27 changes: 26 additions & 1 deletion src/lib_misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -315,10 +315,15 @@ static int sysprof_error(lua_State *L, int status, const char *err_details)
/* local res, err, errno = sysprof.start(options) */
LJLIB_CF(misc_sysprof_start)
{
const char *err_details = NULL;
#if !LJ_HASSYSPROF
err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED);
return sysprof_error(L, PROFILE_ERRUSE, err_details);
#endif /* !LJ_HASSYSPROF */

int status = PROFILE_SUCCESS;

struct luam_Sysprof_Options opt = {};
const char *err_details = NULL;

status = parse_sysprof_opts(L, &opt, &err_details);
if (LJ_UNLIKELY(status != PROFILE_SUCCESS))
Expand All @@ -336,6 +341,11 @@ LJLIB_CF(misc_sysprof_start)
/* local res, err, errno = profile.sysprof_stop() */
LJLIB_CF(misc_sysprof_stop)
{
#if !LJ_HASSYSPROF
const char *err_details = NULL;
err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED);
return sysprof_error(L, PROFILE_ERRUSE, err_details);
#endif /* !LJ_HASSYSPROF */
int status = luaM_sysprof_stop(L);
if (LJ_UNLIKELY(status != PROFILE_SUCCESS))
return sysprof_error(L, status, NULL);
Expand All @@ -347,6 +357,11 @@ LJLIB_CF(misc_sysprof_stop)
/* local counters, err, errno = sysprof.report() */
LJLIB_CF(misc_sysprof_report)
{
#if !LJ_HASSYSPROF
const char *err_details = NULL;
err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED);
return sysprof_error(L, PROFILE_ERRUSE, err_details);
#endif /* !LJ_HASSYSPROF */
struct luam_Sysprof_Counters counters = {};
GCtab *data_tab = NULL;
GCtab *count_tab = NULL;
Expand Down Expand Up @@ -386,6 +401,11 @@ LJLIB_CF(misc_sysprof_report)
/* local started, err, errno = misc.memprof.start(fname) */
LJLIB_CF(misc_memprof_start)
{
#if !LJ_HASMEMPROF
const char *err_details = NULL;
err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED);
return sysprof_error(L, PROFILE_ERRUSE, err_details);
#endif /* !LJ_HASMEMPROF */
struct lj_memprof_options opt = {0};
const char *fname = strdata(lj_lib_checkstr(L, 1));
struct profile_ctx *ctx;
Expand Down Expand Up @@ -440,6 +460,11 @@ LJLIB_CF(misc_memprof_start)
/* local stopped, err, errno = misc.memprof.stop() */
LJLIB_CF(misc_memprof_stop)
{
#if !LJ_HASMEMPROF
const char *err_details = NULL;
err_details = err2msg(LJ_ERR_PROF_DETAILS_DISABLED);
return sysprof_error(L, PROFILE_ERRUSE, err_details);
#endif /* !LJ_HASMEMPROF */
int status = lj_memprof_stop(L);
if (status != PROFILE_SUCCESS) {
switch (status) {
Expand Down
3 changes: 2 additions & 1 deletion src/lj_errmsg.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ ERRDEF(FFI_NYICALL, "NYI: cannot call this C function (yet)")

/* Profiler errors. */
ERRDEF(PROF_MISUSE, "profiler misuse")

#if LJ_HASMEMPROF || LJ_HASSYSPROF
ERRDEF(PROF_ISRUNNING, "profiler is running already")
ERRDEF(PROF_NOTRUNNING, "profiler is not running")
Expand All @@ -192,7 +193,7 @@ ERRDEF(PROF_DETAILS_BADMODE, "profiler mode must be 'D', 'L' or 'C'")
ERRDEF(PROF_DETAILS_BADINTERVAL, "profiler interval must be greater than 1")
ERRDEF(PROF_DETAILS_BADPATH, "profiler path does not exist")
ERRDEF(PROF_DETAILS_BADTABLE, "profiler expects a table with parameters")

ERRDEF(PROF_DETAILS_DISABLED, "profiler is disabled")
#undef ERRDEF

/* Detecting unused error messages:
Expand Down
4 changes: 4 additions & 0 deletions test/tarantool-tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,10 @@ if(LUAJIT_DISABLE_SYSPROF)
list(APPEND LUA_TEST_ENV_MORE LUAJIT_DISABLE_SYSPROF=1)
endif()

if(LUAJIT_DISABLE_MEMPROF)
list(APPEND LUA_TEST_ENV_MORE LUAJIT_DISABLE_MEMPROF=1)
endif()

# Needed to skip some long tests or tests using signals.
# See also https://github.com/tarantool/tarantool/issues/10803.
if(LUAJIT_USE_VALGRIND)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
local tap = require("tap")
local test = tap.test("misclib-memprof-lapi-disabled"):skipcond({
["Memprof is enabled"] = os.getenv('LUAJIT_DISABLE_MEMPROF'),
})

test:plan(6)

-- Attempt to start memprof when memprof is disabled.
local res, err, errno = misc.memprof.start('')
test:is(res, nil, "result status on start when memprof is disabled")
test:ok(err:match("profiler is disabled"),
"error on start when memprof is disabled")
test:ok(type(errno) == "number", "errno on start when memprof is disabled")

-- Attempt to stop memprof when memprof is disabled.
res, err, errno = misc.memprof.stop()
test:is(res, nil, "result status on stop when memprof is disabled")
test:ok(err:match("profiler is disabled"),
"error on stop when memprof is disabled")
test:ok(type(errno) == "number", "errno on start when memprof is disabled")

test:done(true)
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
local tap = require("tap")
local test = tap.test("misclib-sysprof-lapi-disabled"):skipcond({
["Sysprof is enabled"] = os.getenv('LUAJIT_DISABLE_SYSPROF'),
})

test:plan(9)

-- Attempt to start sysprof when sysprof is disabled.
local res, err, errno = misc.sysprof.start()
test:is(res, nil, "result status on start when sysprof is disabled")
test:ok(err:match("profiler is disabled"),
"error on start when sysprof is disabled")
test:ok(type(errno) == "number", "errno on start when sysprof is disabled")

-- Attempt to stop sysprof when sysprof is disabled.
res, err, errno = misc.sysprof.stop()
test:is(res, nil, "result status on stop when sysprof is disabled")
test:ok(err:match("profiler is disabled"),
"error on stop when sysprof is disabled")
test:ok(type(errno) == "number", "errno on start when sysprof is disabled")

-- Attempt to report when sysprof is disabled.
res, err, errno = misc.sysprof.report()
test:is(res, nil, "result status on report when sysprof is disabled")
test:ok(err:match("profiler is disabled"),
"error on stop when sysprof is disabled")
test:ok(type(errno) == "number", "errno on start when sysprof is disabled")

test:done(true)

0 comments on commit e781bfb

Please sign in to comment.