source: mainline/uspace/srv/net/structures/module_map.c@ e326edc

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since e326edc was e326edc, checked in by Jakub Jermar <jakub@…>, 15 years ago

Do not sleep after spawning a task for a networking module.

  • Property mode set to 100644
File size: 3.0 KB
Line 
1/*
2 * Copyright (c) 2009 Lukas Mejdrech
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup net
30 * @{
31 */
32
33/** @file
34 * Character string to module map implementation.
35 */
36
37#include <malloc.h>
38#include <task.h>
39#include <unistd.h>
40
41#include <ipc/services.h>
42
43#include "../err.h"
44#include "../modules.h"
45
46#include "generic_char_map.h"
47#include "module_map.h"
48
49GENERIC_CHAR_MAP_IMPLEMENT( modules, module_t )
50
51int add_module( module_ref * module, modules_ref modules, char * name, char * filename, services_t service, task_id_t task_id, connect_module_t connect_module ){
52 ERROR_DECLARE;
53
54 module_ref tmp_module;
55
56 tmp_module = ( module_ref ) malloc( sizeof( module_t ));
57 if( ! tmp_module ) return ENOMEM;
58 tmp_module->task_id = task_id;
59 tmp_module->phone = 0;
60 tmp_module->usage = 0;
61 tmp_module->name = name;
62 tmp_module->filename = filename;
63 tmp_module->service = service;
64 tmp_module->connect_module = connect_module;
65 if( ERROR_OCCURRED( modules_add( modules, tmp_module->name, 0, tmp_module ))){
66 free( tmp_module );
67 return ERROR_CODE;
68 }
69 if( module ) * module = tmp_module;
70 return EOK;
71}
72
73module_ref get_running_module( modules_ref modules, char * name ){
74 module_ref module;
75
76 module = modules_find( modules, name, 0 );
77 if( ! module ) return NULL;
78 if( ! module->task_id ){
79 module->task_id = spawn( module->filename );
80 if( ! module->task_id ) return NULL;
81 }
82 if( ! module->phone ){
83 module->phone = module->connect_module( module->service );
84 }
85 return module;
86}
87
88task_id_t spawn( char * fname ){
89 char * argv[ 2 ];
90 task_id_t res;
91
92 argv[ 0 ] = fname;
93 argv[ 1 ] = NULL;
94 res = task_spawn( fname, argv );
95
96 return res;
97}
98
99/** @}
100 */
Note: See TracBrowser for help on using the repository browser.