Changeset 79ae36dd in mainline for uspace/srv/loader/main.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/loader/main.c

    r764d71e r79ae36dd  
    5252#include <ipc/services.h>
    5353#include <ipc/loader.h>
    54 #include <ipc/ns.h>
    55 #include <macros.h>
     54#include <ns.h>
    5655#include <loader/pcb.h>
    5756#include <entry_point.h>
     
    6059#include <str.h>
    6160#include <as.h>
    62 
    6361#include <elf.h>
    6462#include <elf_load.h>
     
    414412static void ldr_connection(ipc_callid_t iid, ipc_call_t *icall)
    415413{
    416         ipc_callid_t callid;
    417         ipc_call_t call;
    418         int retval;
    419        
    420414        /* Already have a connection? */
    421415        if (connected) {
     
    430424       
    431425        /* Ignore parameters, the connection is already open */
    432         (void) iid;
    433426        (void) icall;
    434427       
    435         while (1) {
    436                 callid = async_get_call(&call);
     428        while (true) {
     429                int retval;
     430                ipc_call_t call;
     431                ipc_callid_t callid = async_get_call(&call);
     432               
     433                if (!IPC_GET_IMETHOD(call))
     434                        exit(0);
    437435               
    438436                switch (IPC_GET_IMETHOD(call)) {
    439                 case IPC_M_PHONE_HUNGUP:
    440                         exit(0);
    441437                case LOADER_GET_TASKID:
    442438                        ldr_get_taskid(callid, &call);
     
    465461                }
    466462               
    467                 if (IPC_GET_IMETHOD(call) != IPC_M_PHONE_HUNGUP)
    468                         async_answer_0(callid, retval);
     463                async_answer_0(callid, retval);
    469464        }
    470465}
     
    479474        /* Introduce this task to the NS (give it our task ID). */
    480475        task_id_t id = task_get_id();
    481         int rc = async_req_2_0(PHONE_NS, NS_ID_INTRO, LOWER32(id), UPPER32(id));
     476        int rc = ns_intro(id);
    482477        if (rc != EOK)
    483478                return -1;
Note: See TracChangeset for help on using the changeset viewer.