- change the check_pending_repeats from a thread to a kernel_daemon, one less.
- add loading of kernel debugger/ modules - add a kgets() exported func for use by nasty modules =) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17657 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
b3baad129f
commit
8be1739f45
@ -63,7 +63,7 @@ static char sOutputBuffer[OUTPUT_BUFFER_SIZE];
|
|||||||
static char sLastOutputBuffer[OUTPUT_BUFFER_SIZE];
|
static char sLastOutputBuffer[OUTPUT_BUFFER_SIZE];
|
||||||
|
|
||||||
static void flush_pending_repeats(void);
|
static void flush_pending_repeats(void);
|
||||||
static status_t check_pending_repeats(void *data);
|
static void check_pending_repeats(void *data, int iter);
|
||||||
|
|
||||||
static int64 sMessageRepeatTime = 0;
|
static int64 sMessageRepeatTime = 0;
|
||||||
static int32 sMessageRepeatCount = 0;
|
static int32 sMessageRepeatCount = 0;
|
||||||
@ -257,6 +257,13 @@ read_line(char *buffer, int32 maxLength)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern int
|
||||||
|
kgets(char *buf, int len)
|
||||||
|
{
|
||||||
|
return read_line(buf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
parse_line(char *buf, char **argv, int *argc, int max_args)
|
parse_line(char *buf, char **argv, int *argc, int max_args)
|
||||||
{
|
{
|
||||||
@ -676,13 +683,29 @@ debug_init_post_vm(kernel_args *args)
|
|||||||
status_t
|
status_t
|
||||||
debug_init_post_modules(struct kernel_args *args)
|
debug_init_post_modules(struct kernel_args *args)
|
||||||
{
|
{
|
||||||
thread_id thread = spawn_kernel_thread(check_pending_repeats,
|
void *cookie;
|
||||||
"check repeats", B_LOW_PRIORITY, NULL);
|
|
||||||
if (thread >= B_OK)
|
// check for dupped lines every 10/10 second
|
||||||
resume_thread(thread);
|
register_kernel_daemon(check_pending_repeats, NULL, 10);
|
||||||
|
|
||||||
syslog_init_post_threads();
|
syslog_init_post_threads();
|
||||||
|
|
||||||
|
// load kernel debugger addons
|
||||||
|
cookie = open_module_list("debugger");
|
||||||
|
while (true) {
|
||||||
|
char name[B_FILE_NAME_LENGTH];
|
||||||
|
size_t nameLength = sizeof(name);
|
||||||
|
module_info *module;
|
||||||
|
|
||||||
|
if (read_next_module_name(cookie, name, &nameLength) != B_OK)
|
||||||
|
break;
|
||||||
|
if (get_module(name, &module) == B_OK)
|
||||||
|
dprintf("kernel debugger extention \"%s\": loaded\n", name);
|
||||||
|
else
|
||||||
|
dprintf("kernel debugger extention \"%s\": failed to load\n", name);
|
||||||
|
}
|
||||||
|
close_module_list(cookie);
|
||||||
|
|
||||||
return frame_buffer_console_init_post_modules(args);
|
return frame_buffer_console_init_post_modules(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -854,25 +877,21 @@ flush_pending_repeats(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static status_t
|
static void
|
||||||
check_pending_repeats(void *data)
|
check_pending_repeats(void *data, int iter)
|
||||||
{
|
{
|
||||||
while (true) {
|
(void)data;
|
||||||
if (sMessageRepeatCount > 0
|
(void)iter;
|
||||||
&& (system_time() - sMessageRepeatTime) > 1000000) {
|
if (sMessageRepeatCount > 0
|
||||||
cpu_status state = disable_interrupts();
|
&& (system_time() - sMessageRepeatTime) > 1000000) {
|
||||||
acquire_spinlock(&sSpinlock);
|
cpu_status state = disable_interrupts();
|
||||||
|
acquire_spinlock(&sSpinlock);
|
||||||
|
|
||||||
flush_pending_repeats();
|
flush_pending_repeats();
|
||||||
|
|
||||||
release_spinlock(&sSpinlock);
|
release_spinlock(&sSpinlock);
|
||||||
restore_interrupts(state);
|
restore_interrupts(state);
|
||||||
}
|
|
||||||
|
|
||||||
snooze(1000000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return B_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user