Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/ipc/kbox.c

    r09d01f2 r48bcf49  
    206206 * cleanup code.
    207207 *
    208  * @param[out] out_phone  Phone capability handle on success.
    209  * @return Error code.
    210  *
    211  */
    212 int ipc_connect_kbox(task_id_t taskid, cap_handle_t *out_phone)
     208 * @return Phone capability handle on success, or negative error code.
     209 *
     210 */
     211int ipc_connect_kbox(task_id_t taskid)
    213212{
    214213        irq_spinlock_lock(&tasks_lock, true);
     
    232231        }
    233232       
    234         if (task->kb.finished) {
     233        if (task->kb.finished != false) {
    235234                mutex_unlock(&task->kb.cleanup_lock);
    236235                return EINVAL;
    237236        }
    238237       
    239         /* Create a kbox thread if necessary. */
    240         if (task->kb.thread == NULL) {
    241                 thread_t *kb_thread = thread_create(kbox_thread_proc, NULL, task,
    242                     THREAD_FLAG_NONE, "kbox");
    243                
    244                 if (!kb_thread) {
    245                         mutex_unlock(&task->kb.cleanup_lock);
    246                         return ENOMEM;
    247                 }
    248                
    249                 task->kb.thread = kb_thread;
    250                 thread_ready(kb_thread);
    251         }
    252        
    253         /* Allocate a new phone. */
    254         cap_handle_t phone_handle;
    255         int rc = phone_alloc(TASK, &phone_handle);
    256         if (rc != EOK) {
    257                 mutex_unlock(&task->kb.cleanup_lock);
    258                 return rc;
     238        cap_handle_t phone_handle = phone_alloc(TASK);
     239        if (phone_handle < 0) {
     240                mutex_unlock(&task->kb.cleanup_lock);
     241                return phone_handle;
    259242        }
    260243       
     
    265248        (void) ipc_phone_connect(phone_obj->phone, &task->kb.box);
    266249       
     250        if (task->kb.thread != NULL) {
     251                mutex_unlock(&task->kb.cleanup_lock);
     252                return phone_handle;
     253        }
     254       
     255        /* Create a kbox thread */
     256        thread_t *kb_thread = thread_create(kbox_thread_proc, NULL, task,
     257            THREAD_FLAG_NONE, "kbox");
     258        if (!kb_thread) {
     259                mutex_unlock(&task->kb.cleanup_lock);
     260                return ENOMEM;
     261        }
     262       
     263        task->kb.thread = kb_thread;
     264        thread_ready(kb_thread);
     265       
    267266        mutex_unlock(&task->kb.cleanup_lock);
    268         *out_phone = phone_handle;
    269         return EOK;
     267       
     268        return phone_handle;
    270269}
    271270
Note: See TracChangeset for help on using the changeset viewer.