tizenaudio-sink/source: Fix crash when access pcm handle 54/78254/5
authorKimJeongYeon <jeongyeon.kim@samsung.com>
Tue, 5 Jul 2016 01:47:50 +0000 (10:47 +0900)
committerKimJeongYeon <jeongyeon.kim@samsung.com>
Tue, 5 Jul 2016 05:01:18 +0000 (14:01 +0900)
build_pollfd() trying to access u->pcm_handle at sink_process_msg() at module loading step.
But, sometimes the device wasn't open yet. (e.g factory reset, power on, ...)
Therefore, null access to u->pcm_handle causes crash.
I think device need to be opened prior to starting sink's message handler.

[Version] 5.0.61
[Profile] Common
[Issue Type] Bug fix

Signed-off-by: KimJeongYeon <jeongyeon.kim@samsung.com>
Change-Id: I060319c261176bb46f7b1c0804322d4d8c491071

packaging/pulseaudio-modules-tizen.spec
src/module-tizenaudio-sink.c
src/module-tizenaudio-source.c

index 89aa328bf0a2b89a4376b298b4d434de14c73ce9..b88166c2bd2e072d6ebbc821e5f16d3649642f3e 100644 (file)
@@ -1,6 +1,6 @@
 Name:             pulseaudio-modules-tizen
 Summary:          Pulseaudio modules for Tizen
-Version:          5.0.60
+Version:          5.0.61
 Release:          0
 Group:            Multimedia/Audio
 License:          LGPL-2.1+
index 095f6de2826597fedc0e897eb65872c1df7b6cb6..60105d153cd3f794f29ec614681ba2aace3773cf 100644 (file)
@@ -517,11 +517,19 @@ int pa__init(pa_module*m) {
     u->sink->update_requested_latency = sink_update_requested_latency_cb;
     u->sink->userdata = u;
 
+    if (pa_hal_interface_pcm_open(u->hal_interface,
+              (void **)&u->pcm_handle,
+              DIRECTION_OUT,
+              &u->sink->sample_spec,
+              u->frag_size / pa_frame_size(&u->sink->sample_spec),
+              u->nfrags)) {
+        pa_log_error("Error opening PCM device");
+        goto fail;
+    }
+
     pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
     pa_sink_set_rtpoll(u->sink, u->rtpoll);
 
-    unsuspend(u);
-
     u->block_usec = BLOCK_USEC;
     u->timestamp = 0ULL;
     u->timestamp_written = 0ULL;
index d96adb42dc9cb2962ce82a5b5f750d1c362d2ce2..79a4664098c8de77bd24c2a74fb0a2d723867e2a 100644 (file)
@@ -468,11 +468,19 @@ int pa__init(pa_module*m) {
     u->source->update_requested_latency = source_update_requested_latency_cb;
     u->source->userdata = u;
 
+    if (pa_hal_interface_pcm_open(u->hal_interface,
+              (void **)&u->pcm_handle,
+              DIRECTION_IN,
+              &u->source->sample_spec,
+              u->frag_size / pa_frame_size(&u->source->sample_spec),
+              u->nfrags)) {
+        pa_log_error("Error opening PCM device");
+        goto fail;
+    }
+
     pa_source_set_asyncmsgq(u->source, u->thread_mq.inq);
     pa_source_set_rtpoll(u->source, u->rtpoll);
 
-    unsuspend(u);
-
     u->block_usec = BLOCK_USEC;
     u->latency_time = u->block_usec;
     u->timestamp = 0ULL;