Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/devman.c

    r8983273 r64d2b10  
    2828 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2929 */
    30  
    31  /** @addtogroup libc
     30
     31/** @addtogroup libc
    3232 * @{
    3333 */
     
    3737#include <str.h>
    3838#include <stdio.h>
    39 #include <ipc/ipc.h>
    4039#include <ipc/services.h>
    4140#include <ipc/devman.h>
    4241#include <devman.h>
    4342#include <async.h>
     43#include <fibril_synch.h>
    4444#include <errno.h>
    4545#include <malloc.h>
     
    5050static int devman_phone_client = -1;
    5151
     52static FIBRIL_MUTEX_INITIALIZE(devman_phone_mutex);
     53
    5254int devman_get_phone(devman_interface_t iface, unsigned int flags)
    5355{
    5456        switch (iface) {
    5557        case DEVMAN_DRIVER:
    56                 if (devman_phone_driver >= 0)
     58                fibril_mutex_lock(&devman_phone_mutex);
     59                if (devman_phone_driver >= 0) {
     60                        fibril_mutex_unlock(&devman_phone_mutex);
    5761                        return devman_phone_driver;
     62                }
    5863               
    5964                if (flags & IPC_FLAG_BLOCKING)
     
    6469                            SERVICE_DEVMAN, DEVMAN_DRIVER, 0);
    6570               
     71                fibril_mutex_unlock(&devman_phone_mutex);
    6672                return devman_phone_driver;
    6773        case DEVMAN_CLIENT:
    68                 if (devman_phone_client >= 0)
     74                fibril_mutex_lock(&devman_phone_mutex);
     75                if (devman_phone_client >= 0) {
     76                        fibril_mutex_unlock(&devman_phone_mutex);
    6977                        return devman_phone_client;
    70                
    71                 if (flags & IPC_FLAG_BLOCKING)
     78                }
     79               
     80                if (flags & IPC_FLAG_BLOCKING) {
    7281                        devman_phone_client = async_connect_me_to_blocking(
    7382                            PHONE_NS, SERVICE_DEVMAN, DEVMAN_CLIENT, 0);
    74                 else
     83                } else {
    7584                        devman_phone_client = async_connect_me_to(PHONE_NS,
    7685                            SERVICE_DEVMAN, DEVMAN_CLIENT, 0);
    77                
     86                }
     87               
     88                fibril_mutex_unlock(&devman_phone_mutex);
    7889                return devman_phone_client;
    7990        default:
     
    104115        async_set_client_connection(conn);
    105116       
    106         sysarg_t callback_phonehash;
    107         ipc_connect_to_me(phone, 0, 0, 0, &callback_phonehash);
     117        async_connect_to_me(phone, 0, 0, 0, NULL);
    108118        async_wait_for(req, &retval);
    109119       
     
    210220        case DEVMAN_DRIVER:
    211221                if (devman_phone_driver >= 0) {
    212                         ipc_hangup(devman_phone_driver);
     222                        async_hangup(devman_phone_driver);
    213223                        devman_phone_driver = -1;
    214224                }
     
    216226        case DEVMAN_CLIENT:
    217227                if (devman_phone_client >= 0) {
    218                         ipc_hangup(devman_phone_client);
     228                        async_hangup(devman_phone_client);
    219229                        devman_phone_client = -1;
    220230                }
Note: See TracChangeset for help on using the changeset viewer.