Changeset 79ae36dd in mainline for uspace/srv/vfs/vfs_lookup.c


Ignore:
Timestamp:
2011-06-08T19:01:55Z (13 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0eff68e
Parents:
764d71e
Message:

new async framework with integrated exchange tracking

  • strict isolation between low-level IPC and high-level async framework with integrated exchange tracking
    • each IPC connection is represented by an async_sess_t structure
    • each IPC exchange is represented by an async_exch_t structure
    • exchange management is either based on atomic messages (EXCHANGE_ATOMIC), locking (EXCHANGE_SERIALIZE) or connection cloning (EXCHANGE_CLONE)
  • async_obsolete: temporary compatibility layer to keep old async clients working (several pieces of code are currently broken, but only non-essential functionality)
  • IPC_M_PHONE_HANGUP is now method no. 0 (for elegant boolean evaluation)
  • IPC_M_DEBUG_ALL has been renamed to IPC_M_DEBUG
  • IPC_M_PING has been removed (VFS protocol now has VFS_IN_PING)
  • console routines in libc have been rewritten for better abstraction
  • additional use for libc-private header files (FILE structure opaque to the client)
  • various cstyle changes (typos, indentation, missing externs in header files, improved comments, etc.)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/vfs/vfs_lookup.c

    r764d71e r79ae36dd  
    159159
    160160        ipc_call_t answer;
    161         int phone = vfs_grab_phone(root->fs_handle);
    162         aid_t req = async_send_5(phone, VFS_OUT_LOOKUP, (sysarg_t) first,
     161        async_exch_t *exch = vfs_exchange_grab(root->fs_handle);
     162        aid_t req = async_send_5(exch, VFS_OUT_LOOKUP, (sysarg_t) first,
    163163            (sysarg_t) (first + len - 1) % PLB_SIZE,
    164164            (sysarg_t) root->devmap_handle, (sysarg_t) lflag, (sysarg_t) index,
     
    167167        sysarg_t rc;
    168168        async_wait_for(req, &rc);
    169         vfs_release_phone(root->fs_handle, phone);
     169        vfs_exchange_release(exch);
    170170       
    171171        fibril_mutex_lock(&plb_mutex);
     
    208208int vfs_open_node_internal(vfs_lookup_res_t *result)
    209209{
    210         int phone = vfs_grab_phone(result->triplet.fs_handle);
     210        async_exch_t *exch = vfs_exchange_grab(result->triplet.fs_handle);
    211211       
    212212        ipc_call_t answer;
    213         aid_t req = async_send_2(phone, VFS_OUT_OPEN_NODE,
     213        aid_t req = async_send_2(exch, VFS_OUT_OPEN_NODE,
    214214            (sysarg_t) result->triplet.devmap_handle,
    215215            (sysarg_t) result->triplet.index, &answer);
     
    217217        sysarg_t rc;
    218218        async_wait_for(req, &rc);
    219         vfs_release_phone(result->triplet.fs_handle, phone);
     219        vfs_exchange_release(exch);
    220220       
    221221        if (rc == EOK) {
Note: See TracChangeset for help on using the changeset viewer.