Hand the stream socket to the rt thread
authorJoão Paulo Rechi Vita <joao.vita@gmail.com>
Tue, 12 Aug 2008 01:54:09 +0000 (22:54 -0300)
committerLennart Poettering <lennart@poettering.net>
Wed, 10 Sep 2008 22:12:04 +0000 (01:12 +0300)
src/modules/module-bt-device.c

index c0ca637..da2fa33 100644 (file)
@@ -113,6 +113,10 @@ static const char* const valid_modargs[] = {
     NULL
 };
 
+enum {
+    SINK_MESSAGE_PASS_SOCKET = PA_SINK_MESSAGE_MAX
+};
+
 static int bt_audioservice_send(int sk, const bt_audio_msg_header_t *msg) {
     int e;
     pa_log/*_debug*/("sending %s", bt_audio_strmsg(msg->msg_type));
@@ -545,15 +549,15 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
             break;
         }
 
-//        case SINK_MESSAGE_PASS_SOCKET: {
-//            struct pollfd *pollfd;
-//            pa_assert(!u->rtpoll_item);
-//            u->rtpoll_item = pa_rtpoll_item_new(u->rtpoll, PA_RTPOLL_NEVER, 1);
-//            pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
-//            pollfd->fd = u->fd;
-//            pollfd->events = pollfd->revents = 0;
-//            return 0;
-//        }
+        case SINK_MESSAGE_PASS_SOCKET: {
+            struct pollfd *pollfd;
+            pa_assert(!u->rtpoll_item);
+            u->rtpoll_item = pa_rtpoll_item_new(u->rtpoll, PA_RTPOLL_NEVER, 1);
+            pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
+            pollfd->fd = u->stream_fd;
+            pollfd->events = pollfd->revents = 0;
+            return 0;
+        }
     }
 
     return pa_sink_process_msg(o, code, data, offset, chunk);
@@ -809,6 +813,9 @@ int pa__init(pa_module* m) {
     }
     pa_sink_put(u->sink);
 
+    /* hand the socket to the rt thread */
+    pa_asyncmsgq_post(u->thread_mq.inq, PA_MSGOBJECT(u->sink), SINK_MESSAGE_PASS_SOCKET, NULL, 0, NULL, NULL);
+
     pa_modargs_free(ma);
     return 0;