Forgot to report some bugs in this userland_modules.cpp. Should switch to

use the libkernelland_emul.so one day...
Oh, and I change net_server into net_stack_tester, which is what it's really...
just a network stack tester host app.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5114 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Philippe Houdoin
2003-10-21 21:21:11 +00:00
parent c5b5378a79
commit 8055343f23
2 changed files with 23 additions and 5 deletions
+2 -2
View File
@@ -3,12 +3,12 @@ SubDir OBOS_TOP src tests servers net net_server ;
UsePrivateHeaders net ; UsePrivateHeaders net ;
AddResources AddResources
net_server net_stack_tester
: :
net_server.rsrc net_server.rsrc
; ;
SimpleTest net_server : SimpleTest net_stack_tester :
userland_modules.cpp userland_modules.cpp
userland_ipc.c userland_ipc.c
net_server.cpp net_server.cpp
@@ -5,6 +5,7 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <signal.h>
#include <drivers/KernelExport.h> #include <drivers/KernelExport.h>
#include <drivers/module.h> #include <drivers/module.h>
@@ -86,12 +87,14 @@ static int32 g_next_module_id = 1;
// Public routines // Public routines
// --------------- // ---------------
extern "C" {
_EXPORT status_t get_module(const char * name, module_info ** mi) _EXPORT status_t get_module(const char * name, module_info ** mi)
{ {
status_t status; status_t status;
module * m; module * m;
printf("get_module(%s)\n", name); // printf("get_module(%s)\n", name);
m = find_loaded_module_by_name(name); m = find_loaded_module_by_name(name);
if (!m) if (!m)
@@ -123,7 +126,7 @@ _EXPORT status_t put_module(const char * name)
{ {
module * m; module * m;
printf("put_module(%s)\n", name); // printf("put_module(%s)\n", name);
m = find_loaded_module_by_name(name); m = find_loaded_module_by_name(name);
if (!m) if (!m)
@@ -207,6 +210,7 @@ _EXPORT void * open_module_list(const char *prefix)
mlc->search_paths = (addon_path ? strdup(addon_path) : NULL); mlc->search_paths = (addon_path ? strdup(addon_path) : NULL);
mlc->search_path = strtok_r(mlc->search_paths, ":", &mlc->next_path_token); mlc->search_path = strtok_r(mlc->search_paths, ":", &mlc->next_path_token);
mlc->dir_stack = new BList(); mlc->dir_stack = new BList();
mlc->ma = NULL; mlc->ma = NULL;
mlc->mi = NULL; mlc->mi = NULL;
@@ -250,6 +254,7 @@ _EXPORT status_t read_next_module_name(void *cookie, char *buf, size_t *bufsize)
}; };
// We've iterate all module names of this module addon. Find another one... // We've iterate all module names of this module addon. Find another one...
atomic_add(&mlc->ma->ref_count, -1);
unload_module_addon(mlc->ma); unload_module_addon(mlc->ma);
mlc->ma = NULL; mlc->ma = NULL;
mlc->mi = NULL; mlc->mi = NULL;
@@ -314,6 +319,7 @@ _EXPORT status_t read_next_module_name(void *cookie, char *buf, size_t *bufsize)
// WTF it's doing there?!? // WTF it's doing there?!?
continue; continue;
atomic_add(&mlc->ma->ref_count, 1);
// call ourself to enter the module names list iteration at // call ourself to enter the module names list iteration at
// function begining code... // function begining code...
mlc->mi = mlc->ma->infos; mlc->mi = mlc->ma->infos;
@@ -346,8 +352,10 @@ _EXPORT status_t close_module_list(void *cookie)
ASSERT(mlc); ASSERT(mlc);
ASSERT(mlc->prefix); ASSERT(mlc->prefix);
if (mlc->ma) if (mlc->ma) {
atomic_add(&mlc->ma->ref_count, -1);
unload_module_addon(mlc->ma); unload_module_addon(mlc->ma);
};
while((dir = (BDirectory *) mlc->dir_stack->FirstItem())) { while((dir = (BDirectory *) mlc->dir_stack->FirstItem())) {
mlc->dir_stack->RemoveItem(dir); mlc->dir_stack->RemoveItem(dir);
@@ -399,6 +407,16 @@ _EXPORT thread_id spawn_kernel_thread(thread_entry func, const char *name, long
} }
_EXPORT int send_signal_etc(pid_t thid, uint sig, uint32 flags)
{
return send_signal(thid, sig);
}
} // extern "C"
// #pragma mark - // #pragma mark -
// Private routines // Private routines