rm -rf %{buildroot}
%make_install
-mkdir -p %{buildroot}/%{_unitdir}/basic.target.wants/
-ln -s ../dumpsys-service.service %{buildroot}/%{_unitdir}/basic.target.wants/dumpsys-service.service
-
%files
%license LICENSE
%manifest %{name}.manifest
%{_bindir}/dumpsys-service
%defattr(0644,root,root)
-%{_unitdir}/basic.target.wants/dumpsys-service.service
%{_unitdir}/dumpsys-service.service
%{_prefix}/lib/tmpfiles.d/dumpsys-run.conf
+%{_prefix}/share/dbus-1/system-services/org.tizen.dumpsys.service.service
%files -n dumpsys-common
%manifest %{name}.manifest
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE)
INSTALL (FILES dumpsys-service.service DESTINATION /usr/lib/systemd/system/
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE)
+INSTALL (FILES org.tizen.dumpsys.service.service DESTINATION /usr/share/dbus-1/system-services/
+ PERMISSIONS OWNER_READ OWNER_WRITE)
#include <sys/types.h>
#include <unistd.h>
+#define INACTIVITY_TIMEOUT_SEC 10
+
#ifndef LOG_TAG
#define LOG_TAG "DUMPSYS_SERVICE"
#endif
"</node>";
static GMainLoop* loop;
+static GMutex nclients_mutex;
+static unsigned int nclients;
+static guint timeout_id;
+
+static int timeout_cb(gpointer data)
+{
+ LOGI("Dumpsys-service unused for %dsec. Terminating.", INACTIVITY_TIMEOUT_SEC);
+ g_main_loop_quit(loop);
+
+ return 0;
+}
+
+static void up_usage(void)
+{
+ g_mutex_lock(&nclients_mutex);
+
+ ++nclients;
+
+ LOGD("%u client(s) are using dumpsys-service", nclients);
+
+ if (timeout_id) {
+ g_source_remove(timeout_id);
+ timeout_id = 0;
+ }
+
+ g_mutex_unlock(&nclients_mutex);
+}
+
+static void down_usage(void)
+{
+ g_mutex_lock(&nclients_mutex);
+
+ if (nclients > 0)
+ --nclients;
+
+ LOGD("%u client(s) are using dumpsys-service", nclients);
+
+ if (nclients == 0) {
+ if (timeout_id) {
+ g_source_remove(timeout_id);
+ timeout_id = 0;
+ }
+ timeout_id = g_timeout_add_seconds(INACTIVITY_TIMEOUT_SEC, timeout_cb, 0);
+ }
+
+ g_mutex_unlock(&nclients_mutex);
+}
static bool reset_fd_flag(int fd, int flag)
{
GDBusMethodInvocation *invocation,
gpointer user_data)
{
+ up_usage();
+
if (g_strcmp0(method_name, METHOD_DUMP) == 0)
dump_call_handler(conn, parameters, invocation);
+
+ down_usage();
}
static const GDBusInterfaceVTable interface_vtable = {