stream-manager: Change functions of init/done to get/ref/unref 99/179199/3
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 16 May 2018 08:13:21 +0000 (17:13 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Fri, 1 Jun 2018 08:45:18 +0000 (17:45 +0900)
[Version] 11.1.10
[Issue Type] Enhancement

Change-Id: I08024adfefe376043293c38c9dbedf4f0a69f539
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/pulseaudio-modules-tizen.spec
src/device-manager.c
src/module-tizenaudio-policy.c
src/stream-manager-priv.h
src/stream-manager.c
src/stream-manager.h

index cff6824..68c3212 100644 (file)
@@ -1,6 +1,6 @@
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          11.1.9
+Version:          11.1.10
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index 34f9743..430ce07 100644 (file)
@@ -4049,7 +4049,7 @@ pa_device_manager* pa_device_manager_get(pa_core *c) {
 
     pa_assert(c);
 
-    pa_log_info("pa_device_manager_get");
+    pa_log_debug("pa_device_manager_get");
 
     if ((dm = pa_shared_get(c, SHARED_DEVICE_MANAGER)))
         return pa_device_manager_ref(dm);
@@ -4112,8 +4112,8 @@ pa_device_manager* pa_device_manager_ref(pa_device_manager *dm) {
     pa_assert(dm);
     pa_assert(PA_REFCNT_VALUE(dm) > 0);
 
-    pa_log_info("pa_device_manager_ref");
     PA_REFCNT_INC(dm);
+    pa_log_debug("pa_device_manager_ref to %d", PA_REFCNT_VALUE(dm));
 
     return dm;
 }
@@ -4122,7 +4122,7 @@ void pa_device_manager_unref(pa_device_manager *dm) {
     pa_assert(dm);
     pa_assert(PA_REFCNT_VALUE(dm) > 0);
 
-    pa_log_info("pa_device_manager_unref");
+    pa_log_debug("pa_device_manager_unref to %d", PA_REFCNT_VALUE(dm) - 1);
     if (PA_REFCNT_DEC(dm) > 0)
         return;
 
index 2289438..3456371 100644 (file)
@@ -1536,7 +1536,7 @@ int pa__init(pa_module *m)
     }
     u->device_manager = pa_device_manager_get(u->core);
 
-    u->stream_manager = pa_stream_manager_init(u->core);
+    u->stream_manager = pa_stream_manager_get(u->core);
 
     /* load null sink/source */
     args = pa_sprintf_malloc("sink_name=%s", SINK_NAME_NULL);
@@ -1582,7 +1582,7 @@ void pa__done(pa_module *m)
         pa_device_manager_unref(u->device_manager);
 
     if (u->stream_manager)
-        pa_stream_manager_done(u->stream_manager);
+        pa_stream_manager_unref(u->stream_manager);
 
     if (u->communicator.comm) {
         if (u->communicator.comm_hook_select_proper_sink_or_source_slot)
index 1ab8b0d..8fc0175 100644 (file)
@@ -196,6 +196,8 @@ typedef struct _filter_info {
 } filter_info;
 
 struct _stream_manager {
+    PA_REFCNT_DECLARE;
+
     pa_core *core;
     pa_hal_interface *hal;
     pa_device_manager *dm;
index d835372..4f1fdb6 100644 (file)
@@ -42,6 +42,7 @@
 #include <pulsecore/sink.h>
 #include <pulsecore/modargs.h>
 #include <pulsecore/macro.h>
+#include <pulsecore/shared.h>
 
 #include <json.h>
 #include "stream-manager.h"
@@ -53,6 +54,8 @@
 #include "stream-manager-dbus-priv.h"
 #endif
 
+#define SHARED_STREAM_MANAGER "tizen-stream-manager"
+
 #define IS_AVAILABLE_DIRECTION(stream_type, device_direction) \
     ((stream_type == STREAM_SINK_INPUT) ? (device_direction & DM_DEVICE_DIRECTION_OUT) : (device_direction & DM_DEVICE_DIRECTION_IN))
 #define GET_DIRECTION(stream) \
@@ -3101,12 +3104,18 @@ bool pa_stream_manager_check_filter_apply_stream(void *stream, stream_type_t str
     return is_filter_apply_stream(stream, stream_type);
 }
 
-pa_stream_manager* pa_stream_manager_init(pa_core *c) {
+pa_stream_manager* pa_stream_manager_get(pa_core *c) {
     pa_stream_manager *m;
 
     pa_assert(c);
 
+    pa_log_debug("pa_stream_manager_get");
+
+    if ((m = pa_shared_get(c, SHARED_STREAM_MANAGER)))
+        return pa_stream_manager_ref(m);
+
     m = pa_xnew0(pa_stream_manager, 1);
+    PA_REFCNT_INIT(m);
     m->core = c;
 
     if (!(m->hal = pa_hal_interface_get(c)))
@@ -3157,6 +3166,8 @@ pa_stream_manager* pa_stream_manager_init(pa_core *c) {
 
     set_initial_active_device(m);
 
+    pa_shared_set(c, SHARED_STREAM_MANAGER, m);
+
     return m;
 
 fail:
@@ -3177,11 +3188,26 @@ fail:
     return 0;
 }
 
-void pa_stream_manager_done(pa_stream_manager *m) {
+pa_stream_manager* pa_stream_manager_ref(pa_stream_manager *m) {
+    pa_assert(m);
+    pa_assert(PA_REFCNT_VALUE(m) > 0);
+
+    PA_REFCNT_INC(m);
+    pa_log_info("pa_stream_manager_ref to %d", PA_REFCNT_VALUE(m));
+
+    return m;
+}
+
+void pa_stream_manager_unref(pa_stream_manager *m) {
     void *state;
     pa_idxset *streams;
 
     pa_assert(m);
+    pa_assert(PA_REFCNT_VALUE(m) > 0);
+
+    pa_log_info("pa_stream_manager_unref to %d", PA_REFCNT_VALUE(m) - 1);
+    if (PA_REFCNT_DEC(m) > 0)
+        return;
 
     if (m->comm.comm) {
         if (m->comm.comm_hook_device_connection_changed_slot)
index ab1dd09..979672a 100644 (file)
@@ -147,7 +147,8 @@ int32_t pa_stream_manager_get_route_type(void *stream, stream_type_t stream_type
 bool pa_stream_manager_check_name_is_vstream(void *stream, stream_type_t type, bool is_new_data);
 bool pa_stream_manager_check_filter_apply_stream(void *stream, stream_type_t stream_type);
 
-pa_stream_manager* pa_stream_manager_init(pa_core *c);
-void pa_stream_manager_done(pa_stream_manager* m);
+pa_stream_manager* pa_stream_manager_get(pa_core *c);
+pa_stream_manager* pa_stream_manager_ref(pa_stream_manager *m);
+void pa_stream_manager_unref(pa_stream_manager *m);
 
 #endif