handle->location.directory_handle = directory_handle;
/* Ownership is transferred. */
handle->location.path = path_copy;
handle->location.directory_handle = directory_handle;
/* Ownership is transferred. */
handle->location.path = path_copy;
struct lttng_trace_chunk *lttng_trace_chunk_create_anonymous(void)
{
DBG("Creating anonymous trace chunk");
return lttng_trace_chunk_allocate();
}
struct lttng_trace_chunk *lttng_trace_chunk_create_anonymous(void)
{
DBG("Creating anonymous trace chunk");
return lttng_trace_chunk_allocate();
}
struct lttng_trace_chunk *lttng_trace_chunk_create(
uint64_t chunk_id, time_t chunk_creation_time, const char *path)
{
struct lttng_trace_chunk *chunk;
struct lttng_trace_chunk *lttng_trace_chunk_create(
uint64_t chunk_id, time_t chunk_creation_time, const char *path)
{
struct lttng_trace_chunk *chunk;
void lttng_trace_chunk_set_fd_tracker(struct lttng_trace_chunk *chunk,
struct fd_tracker *fd_tracker)
{
void lttng_trace_chunk_set_fd_tracker(struct lttng_trace_chunk *chunk,
struct fd_tracker *fd_tracker)
{
- assert(!chunk->session_output_directory);
- assert(!chunk->chunk_directory);
- assert(lttng_dynamic_pointer_array_get_count(&chunk->files) == 0);
+ LTTNG_ASSERT(!chunk->session_output_directory);
+ LTTNG_ASSERT(!chunk->chunk_directory);
+ LTTNG_ASSERT(lttng_dynamic_pointer_array_get_count(&chunk->files) == 0);
new_chunk->chunk_directory = source_chunk->chunk_directory;
}
new_chunk->close_command = source_chunk->close_command;
new_chunk->chunk_directory = source_chunk->chunk_directory;
}
new_chunk->close_command = source_chunk->close_command;
enum lttng_trace_chunk_status lttng_trace_chunk_get_id(
struct lttng_trace_chunk *chunk, uint64_t *id)
{
enum lttng_trace_chunk_status lttng_trace_chunk_get_id(
struct lttng_trace_chunk *chunk, uint64_t *id)
{
enum lttng_trace_chunk_status lttng_trace_chunk_get_creation_timestamp(
struct lttng_trace_chunk *chunk, time_t *creation_ts)
enum lttng_trace_chunk_status lttng_trace_chunk_get_creation_timestamp(
struct lttng_trace_chunk *chunk, time_t *creation_ts)
enum lttng_trace_chunk_status lttng_trace_chunk_get_close_timestamp(
struct lttng_trace_chunk *chunk, time_t *close_ts)
{
enum lttng_trace_chunk_status lttng_trace_chunk_get_close_timestamp(
struct lttng_trace_chunk *chunk, time_t *close_ts)
{
enum lttng_trace_chunk_status lttng_trace_chunk_set_close_timestamp(
struct lttng_trace_chunk *chunk, time_t close_ts)
{
enum lttng_trace_chunk_status lttng_trace_chunk_set_close_timestamp(
struct lttng_trace_chunk *chunk, time_t close_ts)
{
enum lttng_trace_chunk_status lttng_trace_chunk_get_name(
struct lttng_trace_chunk *chunk, const char **name,
bool *name_overridden)
enum lttng_trace_chunk_status lttng_trace_chunk_get_name(
struct lttng_trace_chunk *chunk, const char **name,
bool *name_overridden)
enum lttng_trace_chunk_status status = LTTNG_TRACE_CHUNK_STATUS_OK;
pthread_mutex_lock(&chunk->lock);
enum lttng_trace_chunk_status status = LTTNG_TRACE_CHUNK_STATUS_OK;
pthread_mutex_lock(&chunk->lock);
enum lttng_trace_chunk_status lttng_trace_chunk_override_name(
struct lttng_trace_chunk *chunk, const char *name)
enum lttng_trace_chunk_status lttng_trace_chunk_override_name(
struct lttng_trace_chunk *chunk, const char *name)
enum lttng_trace_chunk_status lttng_trace_chunk_rename_path(
struct lttng_trace_chunk *chunk, const char *path)
enum lttng_trace_chunk_status lttng_trace_chunk_rename_path(
struct lttng_trace_chunk *chunk, const char *path)
enum lttng_trace_chunk_status lttng_trace_chunk_get_credentials(
struct lttng_trace_chunk *chunk,
struct lttng_credentials *credentials)
enum lttng_trace_chunk_status lttng_trace_chunk_get_credentials(
struct lttng_trace_chunk *chunk,
struct lttng_credentials *credentials)
pthread_mutex_lock(&chunk->lock);
if (chunk->credentials.is_set) {
if (chunk->credentials.value.use_current_user) {
pthread_mutex_lock(&chunk->lock);
if (chunk->credentials.is_set) {
if (chunk->credentials.value.use_current_user) {
- credentials->uid = geteuid();
- credentials->gid = getegid();
+ LTTNG_OPTIONAL_SET(&credentials->uid, geteuid());
+ LTTNG_OPTIONAL_SET(&credentials->gid, getegid());
enum lttng_trace_chunk_status lttng_trace_chunk_set_credentials(
struct lttng_trace_chunk *chunk,
const struct lttng_credentials *user_credentials)
enum lttng_trace_chunk_status lttng_trace_chunk_set_credentials(
struct lttng_trace_chunk *chunk,
const struct lttng_credentials *user_credentials)
enum lttng_trace_chunk_status lttng_trace_chunk_set_credentials_current_user(
struct lttng_trace_chunk *chunk)
{
enum lttng_trace_chunk_status lttng_trace_chunk_set_credentials_current_user(
struct lttng_trace_chunk *chunk)
{
enum lttng_trace_chunk_status lttng_trace_chunk_set_as_owner(
struct lttng_trace_chunk *chunk,
struct lttng_directory_handle *session_output_directory)
enum lttng_trace_chunk_status lttng_trace_chunk_set_as_owner(
struct lttng_trace_chunk *chunk,
struct lttng_directory_handle *session_output_directory)
* A nameless chunk does not need its own output directory.
* The session's output directory will be used.
*/
* A nameless chunk does not need its own output directory.
* The session's output directory will be used.
*/
- const bool reference_acquired =
- lttng_directory_handle_get(
- session_output_directory);
+ reference_acquired = lttng_directory_handle_get(
+ session_output_directory);
chunk_directory_handle = session_output_directory;
}
chunk->chunk_directory = chunk_directory_handle;
chunk_directory_handle = NULL;
reference_acquired = lttng_directory_handle_get(
session_output_directory);
chunk_directory_handle = session_output_directory;
}
chunk->chunk_directory = chunk_directory_handle;
chunk_directory_handle = NULL;
reference_acquired = lttng_directory_handle_get(
session_output_directory);
chunk->session_output_directory = session_output_directory;
LTTNG_OPTIONAL_SET(&chunk->mode, TRACE_CHUNK_MODE_OWNER);
end:
chunk->session_output_directory = session_output_directory;
LTTNG_OPTIONAL_SET(&chunk->mode, TRACE_CHUNK_MODE_OWNER);
end:
enum lttng_trace_chunk_status lttng_trace_chunk_set_as_user(
struct lttng_trace_chunk *chunk,
struct lttng_directory_handle *chunk_directory)
enum lttng_trace_chunk_status lttng_trace_chunk_set_as_user(
struct lttng_trace_chunk *chunk,
struct lttng_directory_handle *chunk_directory)
chunk->chunk_directory = chunk_directory;
LTTNG_OPTIONAL_SET(&chunk->mode, TRACE_CHUNK_MODE_USER);
end:
chunk->chunk_directory = chunk_directory;
LTTNG_OPTIONAL_SET(&chunk->mode, TRACE_CHUNK_MODE_USER);
end:
enum lttng_trace_chunk_status
lttng_trace_chunk_get_session_output_directory_handle(
struct lttng_trace_chunk *chunk,
enum lttng_trace_chunk_status
lttng_trace_chunk_get_session_output_directory_handle(
struct lttng_trace_chunk *chunk,
enum lttng_trace_chunk_status lttng_trace_chunk_borrow_chunk_directory_handle(
struct lttng_trace_chunk *chunk,
const struct lttng_directory_handle **handle)
enum lttng_trace_chunk_status lttng_trace_chunk_borrow_chunk_directory_handle(
struct lttng_trace_chunk *chunk,
const struct lttng_directory_handle **handle)
enum lttng_trace_chunk_status lttng_trace_chunk_create_subdirectory(
struct lttng_trace_chunk *chunk,
const char *path)
enum lttng_trace_chunk_status lttng_trace_chunk_create_subdirectory(
struct lttng_trace_chunk *chunk,
const char *path)
*out_handle = fd_tracker_open_fs_handle(chunk->fd_tracker,
chunk->chunk_directory, file_path, flags, &mode);
ret = *out_handle ? 0 : -1;
*out_handle = fd_tracker_open_fs_handle(chunk->fd_tracker,
chunk->chunk_directory, file_path, flags, &mode);
ret = *out_handle ? 0 : -1;
enum lttng_trace_chunk_status lttng_trace_chunk_open_fs_handle(
struct lttng_trace_chunk *chunk,
const char *file_path,
enum lttng_trace_chunk_status lttng_trace_chunk_open_fs_handle(
struct lttng_trace_chunk *chunk,
const char *file_path,
enum lttng_trace_chunk_status lttng_trace_chunk_open_file(
struct lttng_trace_chunk *chunk,
const char *file_path,
enum lttng_trace_chunk_status lttng_trace_chunk_open_file(
struct lttng_trace_chunk *chunk,
const char *file_path,
* Using this method is never valid when an fd_tracker is being
* used since the resulting file descriptor would not be tracked.
*/
* Using this method is never valid when an fd_tracker is being
* used since the resulting file descriptor would not be tracked.
*/
status = _lttng_trace_chunk_open_fs_handle_locked(chunk, file_path,
flags, mode, &fs_handle, expect_no_file);
pthread_mutex_unlock(&chunk->lock);
status = _lttng_trace_chunk_open_fs_handle_locked(chunk, file_path,
flags, mode, &fs_handle, expect_no_file);
pthread_mutex_unlock(&chunk->lock);
- assert(trace_chunk->mode.value == TRACE_CHUNK_MODE_OWNER);
- assert(!trace_chunk->name_overridden);
- assert(trace_chunk->path);
+ LTTNG_ASSERT(trace_chunk->mode.value == TRACE_CHUNK_MODE_OWNER);
+ LTTNG_ASSERT(!trace_chunk->name_overridden);
+ LTTNG_ASSERT(trace_chunk->path);
ret = lttng_directory_handle_create_subdirectory_as_user(
trace_chunk->session_output_directory,
ret = lttng_directory_handle_create_subdirectory_as_user(
trace_chunk->session_output_directory,
enum lttng_trace_chunk_status lttng_trace_chunk_get_close_command(
struct lttng_trace_chunk *chunk,
enum lttng_trace_chunk_command_type *command_type)
enum lttng_trace_chunk_status lttng_trace_chunk_get_close_command(
struct lttng_trace_chunk *chunk,
enum lttng_trace_chunk_command_type *command_type)
enum lttng_trace_chunk_status lttng_trace_chunk_set_close_command(
struct lttng_trace_chunk *chunk,
enum lttng_trace_chunk_command_type close_command)
enum lttng_trace_chunk_status lttng_trace_chunk_set_close_command(
struct lttng_trace_chunk *chunk,
enum lttng_trace_chunk_command_type close_command)
DBG("Overriding trace chunk close command from \"%s\" to \"%s\"",
close_command_names[chunk->close_command.value],
close_command_names[close_command]);
DBG("Overriding trace chunk close command from \"%s\" to \"%s\"",
close_command_names[chunk->close_command.value],
close_command_names[close_command]);
DBG("Setting trace chunk close command to \"%s\"",
close_command_names[close_command]);
DBG("Setting trace chunk close command to \"%s\"",
close_command_names[close_command]);
bool lttng_trace_chunk_ids_equal(const struct lttng_trace_chunk *chunk_a,
const struct lttng_trace_chunk *chunk_b)
{
bool equal = false;
bool lttng_trace_chunk_ids_equal(const struct lttng_trace_chunk *chunk_a,
const struct lttng_trace_chunk *chunk_b)
{
bool equal = false;
bool lttng_trace_chunk_get(struct lttng_trace_chunk *chunk)
{
return urcu_ref_get_unless_zero(&chunk->ref);
bool lttng_trace_chunk_get(struct lttng_trace_chunk *chunk)
{
return urcu_ref_get_unless_zero(&chunk->ref);
struct lttng_trace_chunk_registry *lttng_trace_chunk_registry_create(void)
{
struct lttng_trace_chunk_registry *registry;
struct lttng_trace_chunk_registry *lttng_trace_chunk_registry_create(void)
{
struct lttng_trace_chunk_registry *registry;
struct lttng_trace_chunk *
lttng_trace_chunk_registry_publish_chunk(
struct lttng_trace_chunk_registry *registry,
struct lttng_trace_chunk *
lttng_trace_chunk_registry_publish_chunk(
struct lttng_trace_chunk_registry *registry,
struct lttng_trace_chunk_registry_element *published_element;
published_node = cds_lfht_add_unique(registry->ht,
struct lttng_trace_chunk_registry_element *published_element;
published_node = cds_lfht_add_unique(registry->ht,
&element->trace_chunk_registry_ht_node);
if (published_node == &element->trace_chunk_registry_ht_node) {
/* Successfully published the new element. */
&element->trace_chunk_registry_ht_node);
if (published_node == &element->trace_chunk_registry_ht_node) {
/* Successfully published the new element. */
struct lttng_trace_chunk *
lttng_trace_chunk_registry_find_chunk(
const struct lttng_trace_chunk_registry *registry,
uint64_t session_id, uint64_t chunk_id)
{
struct lttng_trace_chunk *
lttng_trace_chunk_registry_find_chunk(
const struct lttng_trace_chunk_registry *registry,
uint64_t session_id, uint64_t chunk_id)
{
int lttng_trace_chunk_registry_chunk_exists(
const struct lttng_trace_chunk_registry *registry,
uint64_t session_id, uint64_t chunk_id, bool *chunk_exists)
int lttng_trace_chunk_registry_chunk_exists(
const struct lttng_trace_chunk_registry *registry,
uint64_t session_id, uint64_t chunk_id, bool *chunk_exists)
struct lttng_trace_chunk *
lttng_trace_chunk_registry_find_anonymous_chunk(
const struct lttng_trace_chunk_registry *registry,
uint64_t session_id)
{
struct lttng_trace_chunk *
lttng_trace_chunk_registry_find_anonymous_chunk(
const struct lttng_trace_chunk_registry *registry,
uint64_t session_id)
{
unsigned int lttng_trace_chunk_registry_put_each_chunk(
const struct lttng_trace_chunk_registry *registry)
{
unsigned int lttng_trace_chunk_registry_put_each_chunk(
const struct lttng_trace_chunk_registry *registry)
{