Substitute to use pthead attribute 36/206836/7 accepted/tizen/unified/20190530.043140 submit/tizen/20190529.081944
authorYoungHun Kim <yh8004.kim@samsung.com>
Tue, 28 May 2019 01:33:35 +0000 (10:33 +0900)
committerYoungHun Kim <yh8004.kim@samsung.com>
Wed, 29 May 2019 07:45:15 +0000 (16:45 +0900)
Change-Id: Icb29d5fe5ce8a6b93fc6e07be1acdaa698b195aa

packaging/mused.spec
server/src/muse_server_workqueue.c

index 722d0c9..28730d2 100644 (file)
@@ -1,6 +1,6 @@
 Name:       mused
 Summary:    A multimedia daemon
-Version:    0.3.78
+Version:    0.3.79
 Release:    0
 Group:      System/Libraries
 License:    Apache-2.0 and BSD-3-Clause
index 06c3118..ef90e6e 100644 (file)
@@ -65,32 +65,38 @@ void ms_workqueue_init(ms_workqueue_t *workqueue)
 {
        ms_workqueue_worker_t *worker;
        int idx;
-       pthread_cond_t blank_cond = PTHREAD_COND_INITIALIZER;
-       pthread_mutex_t blank_mutex = PTHREAD_MUTEX_INITIALIZER;
+       pthread_attr_t attr;
 
        LOGD("Enter");
 
        muse_return_if_fail(workqueue);
 
-       memcpy(&workqueue->jobs_mutex, &blank_mutex, sizeof(workqueue->jobs_mutex));
-       memcpy(&workqueue->jobs_cond, &blank_cond, sizeof(workqueue->jobs_cond));
+       pthread_mutex_init(&workqueue->jobs_mutex, NULL);
+       pthread_cond_init(&workqueue->jobs_cond, NULL);
+
+       muse_return_if_fail(pthread_attr_init(&attr) == 0);
+       if (pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED) != 0) {
+               LOGE("Failed to set detach state");
+               goto out;
+       }
 
        for (idx = 0; idx < MUSE_WORK_THREAD_NUM; idx++) {
                worker = calloc(1, sizeof(ms_workqueue_worker_t));
                muse_return_if_fail(worker);
+
                worker->workqueue = workqueue;
-               if (pthread_create(&worker->thread, NULL, _ms_workqueue_worker_function, (void *)worker)) {
+               if (pthread_create(&worker->thread, &attr, _ms_workqueue_worker_function, (void *)worker)) {
                        LOGE("Failed to start all worker threads");
                        free(worker);
-                       return;
+                       goto out;
                }
 
-               /* Make the thread detached */
-               (void)pthread_detach(worker->thread);
-
                LL_ADD(worker, worker->workqueue->workers);
        }
 
+out:
+       muse_return_if_fail(pthread_attr_destroy(&attr) == 0);
+
        LOGD("Leave");
 }
 
@@ -111,6 +117,9 @@ void ms_workqueue_deinit(ms_workqueue_t *workqueue)
        workqueue->waiting_jobs = NULL;
        pthread_cond_broadcast(&workqueue->jobs_cond);
        pthread_mutex_unlock(&workqueue->jobs_mutex);
+
+       pthread_mutex_destroy(&workqueue->jobs_mutex);
+       pthread_cond_destroy(&workqueue->jobs_cond);
        free(workqueue);
 
        LOGD("Leave");