Subversion Repositories HelenOS

Rev

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

Rev 2492 Rev 2534
Line 455... Line 455...
455
 * it into the hash table, so that later we can easily do routing of messages to
455
 * it into the hash table, so that later we can easily do routing of messages to
456
 * particular fibrils.
456
 * particular fibrils.
457
 *
457
 *
458
 * @param in_phone_hash Identification of the incoming connection.
458
 * @param in_phone_hash Identification of the incoming connection.
459
 * @param callid    Hash of the opening IPC_M_CONNECT_ME_TO call.
459
 * @param callid    Hash of the opening IPC_M_CONNECT_ME_TO call.
-
 
460
 *          If callid is zero, the connection was opened by
-
 
461
 *          accepting the IPC_M_CONNECT_TO_ME call and this function
-
 
462
 *          is called directly by the server.
460
 * @param call      Call data of the opening call.
463
 * @param call      Call data of the opening call.
461
 * @param cfibril   Fibril function that should be called upon opening the
464
 * @param cfibril   Fibril function that should be called upon opening the
462
 *          connection.
465
 *          connection.
463
 *
466
 *
464
 * @return      New fibril id or NULL on failure.
467
 * @return      New fibril id or NULL on failure.
Line 469... Line 472...
469
    connection_t *conn;
472
    connection_t *conn;
470
    unsigned long key;
473
    unsigned long key;
471
 
474
 
472
    conn = malloc(sizeof(*conn));
475
    conn = malloc(sizeof(*conn));
473
    if (!conn) {
476
    if (!conn) {
-
 
477
        if (callid)
474
        ipc_answer_fast(callid, ENOMEM, 0, 0);
478
            ipc_answer_fast(callid, ENOMEM, 0, 0);
475
        return NULL;
479
        return NULL;
476
    }
480
    }
477
    conn->in_phone_hash = in_phone_hash;
481
    conn->in_phone_hash = in_phone_hash;
478
    list_initialize(&conn->msg_queue);
482
    list_initialize(&conn->msg_queue);
479
    conn->callid = callid;
483
    conn->callid = callid;
Line 484... Line 488...
484
    conn->cfibril = cfibril;
488
    conn->cfibril = cfibril;
485
 
489
 
486
    conn->wdata.fid = fibril_create(connection_fibril, conn);
490
    conn->wdata.fid = fibril_create(connection_fibril, conn);
487
    if (!conn->wdata.fid) {
491
    if (!conn->wdata.fid) {
488
        free(conn);
492
        free(conn);
-
 
493
        if (callid)
489
        ipc_answer_fast(callid, ENOMEM, 0, 0);
494
            ipc_answer_fast(callid, ENOMEM, 0, 0);
490
        return NULL;
495
        return NULL;
491
    }
496
    }
492
    /* Add connection to the connection hash table */
497
    /* Add connection to the connection hash table */
493
    key = conn->in_phone_hash;
498
    key = conn->in_phone_hash;
494
    futex_down(&async_futex);
499
    futex_down(&async_futex);