Merged with a memory leak fix, read on. Thanks! Jérémie
On Fri, Apr 17, 2015 at 5:26 PM, Jonathan Rajotte < [email protected]> wrote: > Signed-off-by: Jonathan Rajotte <[email protected]> > --- > src/bin/lttng-sessiond/save.c | 10 ++++++++++ > src/common/config/config-session-abi.h | 1 + > src/common/config/config.c | 19 +++++++++++++++++++ > src/common/config/session.xsd | 1 + > 4 files changed, 31 insertions(+) > > diff --git a/src/bin/lttng-sessiond/save.c b/src/bin/lttng-sessiond/save.c > index 0c6894b..d6316ef 100644 > --- a/src/bin/lttng-sessiond/save.c > +++ b/src/bin/lttng-sessiond/save.c > @@ -1663,6 +1663,16 @@ int save_session(struct ltt_session *session, > goto end; > } > > + if(session->shm_path[0] != '\0') { > + ret = config_writer_write_element_string(writer, > + config_element_shared_memory_path, > + session->shm_path); > + if (ret) { > + ret = LTTNG_ERR_SAVE_IO_FAIL; > + goto end; > + } > + } > + > ret = save_domains(writer, session); > if (ret) { > goto end; > diff --git a/src/common/config/config-session-abi.h > b/src/common/config/config-session-abi.h > index 8cbff25..8ac5cb0 100644 > --- a/src/common/config/config-session-abi.h > +++ b/src/common/config/config-session-abi.h > @@ -67,6 +67,7 @@ const char * const config_element_data_uri; > const char * const config_element_max_size; > const char * const config_element_pid; > const char * const config_element_pids; > +const char * const config_element_shared_memory_path; > > const char * const config_domain_type_kernel; > const char * const config_domain_type_ust; > diff --git a/src/common/config/config.c b/src/common/config/config.c > index d84e38b..bc4f0c0 100644 > --- a/src/common/config/config.c > +++ b/src/common/config/config.c > @@ -117,6 +117,7 @@ const char * const config_element_data_uri = > "data_uri"; > const char * const config_element_max_size = "max_size"; > const char * const config_element_pid = "pid"; > const char * const config_element_pids = "pids"; > +const char * const config_element_shared_memory_path = > "shared_memory_path"; > > const char * const config_domain_type_kernel = "KERNEL"; > const char * const config_domain_type_ust = "UST"; > @@ -2172,6 +2173,7 @@ int process_session_node(xmlNodePtr session_node, > const char *session_name, > int ret, started = -1, snapshot_mode = -1; > uint64_t live_timer_interval = UINT64_MAX; > char *name = NULL; > + char *shm_path = NULL; > xmlNodePtr domains_node = NULL; > xmlNodePtr output_node = NULL; > xmlNodePtr node; > @@ -2216,6 +2218,16 @@ int process_session_node(xmlNodePtr session_node, > const char *session_name, > config_element_output)) { > /* output */ > output_node = node; > + } else if (!shm_path && !strcmp((const char *) node->name, > + > config_element_shared_memory_path)) { > + /* shared memory path */ > + xmlChar *node_content = xmlNodeGetContent(node); > As per the libxml docs[1]: xmlNodeGetContent(): Returns: a new #xmlChar * or NULL if no content is available. It's up to the caller to free the memory with xmlFree(). I have added an xmlFree() call to the teardown. [1] http://xmlsoft.org/html/libxml-tree.html#xmlNodeGetContent + if (!node_content) { > + ret = -LTTNG_ERR_NOMEM; > + goto error; > + } > + > + shm_path = (char *) node_content; > } else { > /* attributes, snapshot_mode or > live_timer_interval */ > xmlNodePtr attributes_child = > @@ -2356,6 +2368,13 @@ domain_init_error: > goto error; > } > > + if (shm_path) { > + ret = lttng_set_session_shm_path(name, shm_path); > + if (ret) { > + goto error; > + } > + } > + > for (node = xmlFirstElementChild(domains_node); node; > node = xmlNextElementSibling(node)) { > ret = process_domain_node(node, name); > diff --git a/src/common/config/session.xsd b/src/common/config/session.xsd > index 6d74e85..0a7458d 100644 > --- a/src/common/config/session.xsd > +++ b/src/common/config/session.xsd > @@ -279,6 +279,7 @@ elementFormDefault="qualified" version="2.5"> > <xs:complexType name="session_type"> > <xs:all> > <xs:element name="name" type="name_type"/> > + <xs:element name="shared_memory_path" type="xs:string" > minOccurs="0"/> > <xs:element name="domains" type="domain_list_type" > minOccurs="0"/> > <xs:element name="started" type="xs:boolean" default="0" > minOccurs="0"/> > <xs:element name="attributes" > type="session_attributes_type" minOccurs="0"/> > -- > 2.1.4 > > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com
_______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
