projects
/
lttng-modules.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Keep reference count on transport and file ops modules
[lttng-modules.git]
/
ltt-events.c
diff --git
a/ltt-events.c
b/ltt-events.c
index 3457699f812edfaa347aec64086321b2aa341b49..3532dee5a1c8d46e246fa14c8e6c07a1257f26c7 100644
(file)
--- a/
ltt-events.c
+++ b/
ltt-events.c
@@
-14,7
+14,7
@@
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/jiffies.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/jiffies.h>
-#include
<linux/uuid.h>
+#include
"wrapper/uuid.h"
#include "wrapper/vmalloc.h" /* for wrapper_vmalloc_sync_all() */
#include "ltt-events.h"
#include "ltt-tracer.h"
#include "wrapper/vmalloc.h" /* for wrapper_vmalloc_sync_all() */
#include "ltt-events.h"
#include "ltt-tracer.h"
@@
-196,7
+196,7
@@
struct ltt_channel *ltt_channel_create(struct ltt_session *session,
unsigned int read_timer_interval)
{
struct ltt_channel *chan;
unsigned int read_timer_interval)
{
struct ltt_channel *chan;
- struct ltt_transport *transport;
+ struct ltt_transport *transport
= NULL
;
mutex_lock(&sessions_mutex);
if (session->been_active)
mutex_lock(&sessions_mutex);
if (session->been_active)
@@
-207,6
+207,10
@@
struct ltt_channel *ltt_channel_create(struct ltt_session *session,
transport_name);
goto notransport;
}
transport_name);
goto notransport;
}
+ if (!try_module_get(transport->owner)) {
+ printk(KERN_WARNING "LTT : Can't lock transport module.\n");
+ goto notransport;
+ }
chan = kzalloc(sizeof(struct ltt_channel), GFP_KERNEL);
if (!chan)
goto nomem;
chan = kzalloc(sizeof(struct ltt_channel), GFP_KERNEL);
if (!chan)
goto nomem;
@@
-224,6
+228,7
@@
struct ltt_channel *ltt_channel_create(struct ltt_session *session,
goto create_error;
chan->enabled = 1;
chan->ops = &transport->ops;
goto create_error;
chan->enabled = 1;
chan->ops = &transport->ops;
+ chan->transport = transport;
list_add(&chan->list, &session->chan);
mutex_unlock(&sessions_mutex);
return chan;
list_add(&chan->list, &session->chan);
mutex_unlock(&sessions_mutex);
return chan;
@@
-231,6
+236,8
@@
struct ltt_channel *ltt_channel_create(struct ltt_session *session,
create_error:
kfree(chan);
nomem:
create_error:
kfree(chan);
nomem:
+ if (transport)
+ module_put(transport->owner);
notransport:
active:
mutex_unlock(&sessions_mutex);
notransport:
active:
mutex_unlock(&sessions_mutex);
@@
-244,6
+251,7
@@
static
void _ltt_channel_destroy(struct ltt_channel *chan)
{
chan->ops->channel_destroy(chan->chan);
void _ltt_channel_destroy(struct ltt_channel *chan)
{
chan->ops->channel_destroy(chan->chan);
+ module_put(chan->transport->owner);
list_del(&chan->list);
lttng_destroy_context(chan->ctx);
kfree(chan);
list_del(&chan->list);
lttng_destroy_context(chan->ctx);
kfree(chan);
This page took
0.024473 seconds
and
4
git commands to generate.