Subversion Repositories HelenOS

Rev

Rev 2472 | Rev 2601 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2472 Rev 2494
Line 65... Line 65...
65
static void _ipc_call_init(call_t *call)
65
static void _ipc_call_init(call_t *call)
66
{
66
{
67
    memsetb((uintptr_t) call, sizeof(*call), 0);
67
    memsetb((uintptr_t) call, sizeof(*call), 0);
68
    call->callerbox = &TASK->answerbox;
68
    call->callerbox = &TASK->answerbox;
69
    call->sender = TASK;
69
    call->sender = TASK;
-
 
70
    call->buffer = NULL;
70
}
71
}
71
 
72
 
72
/** Allocate and initialize a call structure.
73
/** Allocate and initialize a call structure.
73
 *
74
 *
74
 * The call is initialized, so that the reply will be directed to
75
 * The call is initialized, so that the reply will be directed to
Line 105... Line 106...
105
 * @param call      Call structure to be freed.
106
 * @param call      Call structure to be freed.
106
 */
107
 */
107
void ipc_call_free(call_t *call)
108
void ipc_call_free(call_t *call)
108
{
109
{
109
    ASSERT(!(call->flags & IPC_CALL_STATIC_ALLOC));
110
    ASSERT(!(call->flags & IPC_CALL_STATIC_ALLOC));
-
 
111
    /* Check to see if we have data in the IPC_M_DATA_SEND buffer. */
-
 
112
    if (call->buffer)
-
 
113
        free(call->buffer);
110
    slab_free(ipc_call_slab, call);
114
    slab_free(ipc_call_slab, call);
111
}
115
}
112
 
116
 
113
/** Initialize an answerbox structure.
117
/** Initialize an answerbox structure.
114
 *
118
 *
Line 290... Line 294...
290
{
294
{
291
    answerbox_t *box;
295
    answerbox_t *box;
292
    call_t *call;
296
    call_t *call;
293
   
297
   
294
    spinlock_lock(&phone->lock);
298
    spinlock_lock(&phone->lock);
-
 
299
    if (phone->state == IPC_PHONE_FREE ||
295
    if (phone->state == IPC_PHONE_FREE || phone->state == IPC_PHONE_HUNGUP ||
300
        phone->state == IPC_PHONE_HUNGUP ||
296
        phone->state == IPC_PHONE_CONNECTING) {
301
        phone->state == IPC_PHONE_CONNECTING) {
297
        spinlock_unlock(&phone->lock);
302
        spinlock_unlock(&phone->lock);
298
        return -1;
303
        return -1;
299
    }
304
    }
300
    box = phone->callee;
305
    box = phone->callee;