Not needed, and corner cases not covered.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
jul_add_app(app);
/*
- * Attach JUL application to a UST app object if one exists.
- *
- * FIXME: This implies that the UST app object exists and created before
- * JUL registration. Must confirm or else JUL app will leak until socket is
- * closed by the application.
+ * We don't need to attach the JUL app to the app. If we ever do
+ * so, we should consider both registration order of JUL before
+ * app and app before JUL.
*/
- jul_attach_app(app);
return new_sock->fd;
goto error;
}
- /*
- * FIXME: Should we try to invalidate the JUL socket in the
- * associated ust app.
- */
destroy_jul_app(pollfd);
} else if (revents & (LPOLLIN)) {
int new_fd;
app->pid = pid;
app->sock = sock;
- /* Flag it invalid until assignation. */
- app->ust_app_sock = -1;
lttng_ht_node_init_ulong(&app->node, (unsigned long) app->sock->fd);
error:
rcu_read_unlock();
}
-/*
- * Attach a given JUL application to an UST app object. This is done by copying
- * the socket fd value into the ust app obj. atomically.
- */
-void jul_attach_app(struct jul_app *japp)
-{
- struct ust_app *uapp;
-
- assert(japp);
-
- rcu_read_lock();
- uapp = ust_app_find_by_pid(japp->pid);
- if (!uapp) {
- goto end;
- }
-
- uatomic_set(&uapp->jul_app_sock, japp->sock->fd);
-
- DBG3("JUL app pid: %d, sock: %d attached to UST app.", japp->pid,
- japp->sock->fd);
-
-end:
- rcu_read_unlock();
- return;
-}
-
-/*
- * Remove JUL app. reference from an UST app object and set it to NULL.
- */
-void jul_detach_app(struct jul_app *japp)
-{
- struct ust_app *uapp;
-
- assert(japp);
-
- rcu_read_lock();
-
- if (japp->ust_app_sock < 0) {
- goto end;
- }
-
- uapp = ust_app_find_by_sock(japp->ust_app_sock);
- if (!uapp) {
- goto end;
- }
-
- uapp->jul_app_sock = -1;
-
-end:
- rcu_read_unlock();
- return;
-}
-
/*
* Delete JUL application from the global hash table.
*/
*/
struct lttcomm_sock *sock;
- /*
- * Associated UST app. socket. To get a reference to the ust application
- * object corresponding to that socket, a lookup MUST be done each time
- * since there is important synchronization issue for the lockless hash
- * table shared accross multiple threads.
- */
- int ust_app_sock;
-
/* Initialized with the JUL sock value. */
struct lttng_ht_node_ulong node;
};
void jul_add_app(struct jul_app *app);
void jul_delete_app(struct jul_app *app);
struct jul_app *jul_find_app_by_sock(int sock);
-void jul_attach_app(struct jul_app *japp);
-void jul_detach_app(struct jul_app *app);
void jul_destroy_app(struct jul_app *app);
/* JUL action API */