Add an external method to disable leak detective temporarly

This commit is contained in:
Martin Willi
2012-07-13 13:23:29 +02:00
parent 893c3a4ead
commit b46776aea1
2 changed files with 38 additions and 0 deletions
+30
View File
@@ -397,6 +397,35 @@ METHOD(leak_detective_t, report, void,
}
}
METHOD(leak_detective_t, set_state, bool,
private_leak_detective_t *this, bool enable)
{
static struct sched_param oldparams;
static int oldpolicy;
struct sched_param params;
pthread_t thread_id;
if (enable == installed)
{
return installed;
}
thread_id = pthread_self();
if (enable)
{
install_hooks();
pthread_setschedparam(thread_id, oldpolicy, &oldparams);
}
else
{
pthread_getschedparam(thread_id, &oldpolicy, &oldparams);
params.__sched_priority = sched_get_priority_max(SCHED_FIFO);
pthread_setschedparam(thread_id, SCHED_FIFO, &params);
uninstall_hooks();
}
installed = enable;
return !installed;
}
METHOD(leak_detective_t, usage, void,
private_leak_detective_t *this, FILE *out)
{
@@ -620,6 +649,7 @@ leak_detective_t *leak_detective_create()
.public = {
.report = _report,
.usage = _usage,
.set_state = _set_state,
.destroy = _destroy,
},
);
+8
View File
@@ -49,6 +49,14 @@ struct leak_detective_t {
*/
void (*usage)(leak_detective_t *this, FILE *out);
/**
* Enable/disable leak detective hooks.
*
* @param TRUE to enable, FALSE to disable
* @return state active before calling set_state
*/
bool (*set_state)(leak_detective_t *this, bool enabled);
/**
* Destroy a leak_detective instance.
*/