Subversion Repositories HelenOS

Rev

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

Rev 2552 Rev 2560
Line 54... Line 54...
54
    bool keep_on_going = 1;
54
    bool keep_on_going = 1;
55
 
55
 
56
    printf("Connection opened from %p\n", icall->in_phone_hash);
56
    printf("Connection opened from %p\n", icall->in_phone_hash);
57
 
57
 
58
    /*
58
    /*
-
 
59
     * Initialize the table of open files.
-
 
60
     */
-
 
61
    if (!vfs_conn_open_files_init()) {
-
 
62
        ipc_answer_fast(iid, ENOMEM, 0, 0);
-
 
63
        return;
-
 
64
    }
-
 
65
 
-
 
66
    /*
59
     * The connection was opened via the IPC_CONNECT_ME_TO call.
67
     * The connection was opened via the IPC_CONNECT_ME_TO call.
60
     * This call needs to be answered.
68
     * This call needs to be answered.
61
     */
69
     */
62
    ipc_answer_fast(iid, EOK, 0, 0);
70
    ipc_answer_fast(iid, EOK, 0, 0);
63
 
71
 
64
    /*
72
    /*
65
     * Here we enter the main connection fibril loop.
73
     * Here we enter the main connection fibril loop.
66
     * The logic behind this loop and the protocol is that we'd like to keep
74
     * The logic behind this loop and the protocol is that we'd like to keep
67
     * each connection open for a while before we close it. The benefit of
75
     * each connection open until the client hangs up. When the client hangs
68
     * this is that the client doesn't have to establish a new connection
76
     * up, we will free its VFS state. The act of hanging up the connection
69
     * upon each request.  On the other hand, the client must be ready to
77
     * by the client is equivalent to client termination because we cannot
70
     * re-establish a connection if we hang it up due to reaching of maximum
78
     * distinguish one from the other. On the other hand, the client can
71
     * number of requests per connection or due to the client timing out.
79
     * hang up arbitrarily if it has no open files and reestablish the
-
 
80
     * connection later.
72
     */
81
     */
73
     
-
 
74
    while (keep_on_going) {
82
    while (keep_on_going) {
75
        ipc_callid_t callid;
83
        ipc_callid_t callid;
76
        ipc_call_t call;
84
        ipc_call_t call;
77
 
85
 
78
        callid = async_get_call(&call);
86
        callid = async_get_call(&call);
Line 83... Line 91...
83
        case IPC_M_PHONE_HUNGUP:
91
        case IPC_M_PHONE_HUNGUP:
84
            keep_on_going = false;
92
            keep_on_going = false;
85
            break;
93
            break;
86
        case VFS_REGISTER:
94
        case VFS_REGISTER:
87
            vfs_register(callid, &call);
95
            vfs_register(callid, &call);
88
            keep_on_going = false;
-
 
89
            break;
96
            break;
90
        case VFS_MOUNT:
97
        case VFS_MOUNT:
91
        case VFS_UNMOUNT:
98
        case VFS_UNMOUNT:
92
        case VFS_OPEN:
99
        case VFS_OPEN:
93
        case VFS_CREATE:
100
        case VFS_CREATE: