/*
* ltt-events.c
*
- * Copyright 2010 (c) - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- *
* Holds LTTng per-session event registry.
*
- * Dual LGPL v2.1/GPL v2 license.
+ * Copyright (C) 2010-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; only
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#define _GNU_SOURCE
{
struct cds_hlist_head *head;
struct ust_pending_probe *e;
- size_t name_len = strlen(name);
+ size_t name_len = strlen(name) + 1;
uint32_t hash;
- if (name_len > LTTNG_UST_SYM_NAME_LEN - 1) {
- WARN("Truncating tracepoint name %s which exceeds size limits of %u chars", name, LTTNG_UST_SYM_NAME_LEN - 1);
- name_len = LTTNG_UST_SYM_NAME_LEN - 1;
+ if (name_len > LTTNG_UST_SYM_NAME_LEN) {
+ WARN("Truncating tracepoint name %s which exceeds size limits of %u chars", name, LTTNG_UST_SYM_NAME_LEN);
+ name_len = LTTNG_UST_SYM_NAME_LEN;
}
- hash = jhash(name, name_len, 0);
+ hash = jhash(name, name_len - 1, 0);
head = &pending_probe_table[hash & (PENDING_PROBE_HASH_SIZE - 1)];
e = zmalloc(sizeof(struct ust_pending_probe) + name_len);
if (!e)
return -ENOMEM;
- memcpy(&e->name[0], name, name_len + 1);
- e->name[name_len] = '\0';
+ memcpy(&e->name[0], name, name_len);
+ e->name[name_len - 1] = '\0';
e->loglevel_type = loglevel_type;
e->loglevel = loglevel;
cds_hlist_add_head(&e->node, head);
const char *name = desc->name;
int ret = 0;
struct lttng_ust_event event_param;
- size_t name_len = strlen(name);
+ size_t name_len = strlen(name) + 1;
uint32_t hash;
/* Wildcard */
}
}
- if (name_len > LTTNG_UST_SYM_NAME_LEN - 1) {
- WARN("Truncating tracepoint name %s which exceeds size limits of %u chars", name, LTTNG_UST_SYM_NAME_LEN - 1);
- name_len = LTTNG_UST_SYM_NAME_LEN - 1;
+ if (name_len > LTTNG_UST_SYM_NAME_LEN) {
+ WARN("Truncating tracepoint name %s which exceeds size limits of %u chars", name, LTTNG_UST_SYM_NAME_LEN);
+ name_len = LTTNG_UST_SYM_NAME_LEN;
}
- hash = jhash(name, name_len, 0);
+ hash = jhash(name, name_len - 1, 0);
head = &pending_probe_table[hash & (PENDING_PROBE_HASH_SIZE - 1)];
cds_hlist_for_each_entry_safe(e, node, p, head, node) {
struct ltt_event *event;
*/
int ltt_event_create(struct ltt_channel *chan,
struct lttng_ust_event *event_param,
- void *filter,
+ void (*filter)(struct ltt_event *event),
struct ltt_event **_event)
{
const struct lttng_event_desc *desc = NULL; /* silence gcc */
"struct packet_context {\n"
" uint64_clock_monotonic_t timestamp_begin;\n"
" uint64_clock_monotonic_t timestamp_end;\n"
- " uint32_t events_discarded;\n"
+ " unsigned long events_discarded;\n"
" uint32_t content_size;\n"
" uint32_t packet_size;\n"
" uint32_t cpu_id;\n"
return 0;
monotonic[1] = trace_clock_read64();
offset = (monotonic[0] + monotonic[1]) >> 1;
- realtime = rts.tv_sec * 1000000000ULL;
+ realtime = (uint64_t) rts.tv_sec * 1000000000ULL;
realtime += rts.tv_nsec;
offset = realtime - offset;
return offset;
"typealias integer { size = 16; align = %u; signed = false; } := uint16_t;\n"
"typealias integer { size = 32; align = %u; signed = false; } := uint32_t;\n"
"typealias integer { size = 64; align = %u; signed = false; } := uint64_t;\n"
+ "typealias integer { size = %u; align = %u; signed = false; } := unsigned long;\n"
"typealias integer { size = 5; align = 1; signed = false; } := uint5_t;\n"
"typealias integer { size = 27; align = 1; signed = false; } := uint27_t;\n"
"\n"
lttng_alignof(uint16_t) * CHAR_BIT,
lttng_alignof(uint32_t) * CHAR_BIT,
lttng_alignof(uint64_t) * CHAR_BIT,
+ sizeof(unsigned long) * CHAR_BIT,
+ lttng_alignof(unsigned long) * CHAR_BIT,
CTF_SPEC_MAJOR,
CTF_SPEC_MINOR,
uuid_s,
if (!e)
return ERR_PTR(-ENOMEM);
memcpy(&e->name[0], event_param->name, name_len);
+ e->loglevel_type = event_param->loglevel_type;
+ e->loglevel = event_param->loglevel;
cds_list_add(&e->list, &wildcard_list);
CDS_INIT_LIST_HEAD(&e->session_list);
}