Author: iratqq
Date: Mon Mar 2 10:26:02 2009
New Revision: 5880
Modified:
trunk/uim/fileio.c
trunk/uim/process.c
trunk/uim/socket.c
Log:
* uim/fileio.c (make_arg_cons):
* uim/process.c (make_arg_cons):
* uim/socket.c (make_arg_cons):
- New function.
* uim/fileio.c (make_arg_list):
* uim/process.c (make_arg_list):
* uim/socket.c (make_arg_list):
- Mark as gc protect.
* uim/fileio.c (uim_plugin_instance_init):
* uim/fileio.c (uim_plugin_instance_init):
* uim/socket.c (uim_plugin_instance_init):
- Mark as gc protect after all flags are set.
Modified: trunk/uim/fileio.c
==============================================================================
--- trunk/uim/fileio.c (original)
+++ trunk/uim/fileio.c Mon Mar 2 10:26:02 2009
@@ -67,6 +67,12 @@
} opt_args;
static uim_lisp
+make_arg_cons(const opt_args *arg)
+{
+ return CONS(MAKE_SYM(arg->arg), MAKE_INT(arg->flag));
+}
+
+static uim_lisp
make_arg_list(const opt_args *list)
{
uim_lisp ret_;
@@ -74,7 +80,8 @@
ret_ = uim_scm_null();
while (list[i].arg != 0) {
- ret_ = CONS(CONS(MAKE_SYM(list[i].arg), MAKE_INT(list[i].flag)), ret_);
+ ret_ =
CONS((uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)make_arg_cons,
+ (void *)&list[i]),
ret_);
i++;
}
return ret_;
@@ -320,10 +327,10 @@
uim_scm_init_proc3("file-open", c_file_open);
uim_scm_init_proc0("file-open-flags?", c_file_open_flags);
uim_scm_init_proc0("file-open-mode?", c_file_open_mode);
- uim_scm_gc_protect(&uim_lisp_open_flags);
- uim_scm_gc_protect(&uim_lisp_open_mode);
uim_lisp_open_flags = make_arg_list(open_flags);
uim_lisp_open_mode = make_arg_list(open_mode);
+ uim_scm_gc_protect(&uim_lisp_open_flags);
+ uim_scm_gc_protect(&uim_lisp_open_mode);
uim_scm_init_proc1("file-close", c_file_close);
uim_scm_init_proc2("file-read", c_file_read);
@@ -332,8 +339,8 @@
uim_scm_init_proc2("file-poll", c_file_poll);
uim_scm_init_proc0("file-poll-flags?", c_file_poll_flags);
- uim_scm_gc_protect(&uim_lisp_poll_flags);
uim_lisp_poll_flags = make_arg_list(poll_flags);
+ uim_scm_gc_protect(&uim_lisp_poll_flags);
uim_scm_init_proc1("file-ready?", c_file_ready);
Modified: trunk/uim/process.c
==============================================================================
--- trunk/uim/process.c (original)
+++ trunk/uim/process.c Mon Mar 2 10:26:02 2009
@@ -53,6 +53,12 @@
} opt_args;
static uim_lisp
+make_arg_cons(const opt_args *arg)
+{
+ return CONS(MAKE_SYM(arg->arg), MAKE_INT(arg->flag));
+}
+
+static uim_lisp
make_arg_list(const opt_args *list)
{
uim_lisp ret_;
@@ -60,7 +66,8 @@
ret_ = uim_scm_null();
while (list[i].arg != 0) {
- ret_ = CONS(CONS(MAKE_SYM(list[i].arg), MAKE_INT(list[i].flag)), ret_);
+ ret_ =
CONS((uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)make_arg_cons,
+ (void *)&list[i]),
ret_);
i++;
}
return ret_;
@@ -218,8 +225,8 @@
uim_scm_init_proc1("_exit", c__exit);
uim_scm_init_proc2("process-waitpid", c_process_waitpid);
uim_scm_init_proc0("process-waitpid-options?",
c_process_waitpid_options);
- uim_scm_gc_protect(&uim_lisp_process_waitpid_options);
uim_lisp_process_waitpid_options = make_arg_list(waitpid_options);
+ uim_scm_gc_protect(&uim_lisp_process_waitpid_options);
uim_scm_eval_c_string("(define process-waitpid-options-alist
(process-waitpid-options?))");
uim_scm_init_proc2("daemon", c_daemon);
Modified: trunk/uim/socket.c
==============================================================================
--- trunk/uim/socket.c (original)
+++ trunk/uim/socket.c Mon Mar 2 10:26:02 2009
@@ -60,6 +60,12 @@
} opt_args;
static uim_lisp
+make_arg_cons(const opt_args *arg)
+{
+ return CONS(MAKE_SYM(arg->arg), MAKE_INT(arg->flag));
+}
+
+static uim_lisp
make_arg_list(const opt_args *list)
{
uim_lisp ret_;
@@ -67,7 +73,8 @@
ret_ = uim_scm_null();
while (list[i].arg != 0) {
- ret_ = CONS(CONS(MAKE_SYM(list[i].arg), MAKE_INT(list[i].flag)), ret_);
+ ret_ =
CONS((uim_lisp)uim_scm_call_with_gc_ready_stack((uim_gc_gate_func_ptr)make_arg_cons,
+ (void *)&list[i]),
ret_);
i++;
}
return ret_;
@@ -411,26 +418,26 @@
uim_scm_init_proc2("addrinfo-set-ai-flags!", c_addrinfo_set_ai_flags);
uim_scm_init_proc1("addrinfo-ai-flags?", c_addrinfo_ref_ai_flags);
uim_scm_init_proc0("addrinfo-ai-flags-alist?",
c_addrinfo_ref_ai_flags_alist);
- uim_scm_gc_protect(&uim_lisp_ai_flags);
uim_lisp_ai_flags = make_arg_list(ai_flags);
+ uim_scm_gc_protect(&uim_lisp_ai_flags);
uim_scm_init_proc2("addrinfo-set-ai-family!", c_addrinfo_set_ai_family);
uim_scm_init_proc1("addrinfo-ai-family?", c_addrinfo_ref_ai_family);
uim_scm_init_proc0("addrinfo-ai-family-alist?",
c_addrinfo_ref_ai_family_alist);
- uim_scm_gc_protect(&uim_lisp_ai_family);
uim_lisp_ai_family = make_arg_list(ai_family);
+ uim_scm_gc_protect(&uim_lisp_ai_family);
uim_scm_init_proc2("addrinfo-set-ai-socktype!",
c_addrinfo_set_ai_socktype);
uim_scm_init_proc1("addrinfo-ai-socktype?", c_addrinfo_ref_ai_socktype);
uim_scm_init_proc0("addrinfo-ai-socktype-alist?",
c_addrinfo_ref_ai_socktype_alist);
- uim_scm_gc_protect(&uim_lisp_ai_socktype);
uim_lisp_ai_socktype = make_arg_list(ai_socktype);
+ uim_scm_gc_protect(&uim_lisp_ai_socktype);
uim_scm_init_proc2("addrinfo-set-ai-protocol!",
c_addrinfo_set_ai_protocol);
uim_scm_init_proc1("addrinfo-ai-protocol?", c_addrinfo_ref_ai_protocol);
uim_scm_init_proc0("addrinfo-ai-protocol-alist?",
c_addrinfo_ref_ai_protocol_alist);
- uim_scm_gc_protect(&uim_lisp_ai_protocol);
uim_lisp_ai_protocol = make_arg_list(ai_protocol);
+ uim_scm_gc_protect(&uim_lisp_ai_protocol);
uim_scm_init_proc1("addrinfo-ai-addrlen?", c_addrinfo_ref_ai_addrlen);
uim_scm_init_proc1("addrinfo-ai-addr?", c_addrinfo_ref_ai_addr);
@@ -454,8 +461,8 @@
uim_scm_init_proc2("listen", c_listen);
uim_scm_init_proc2("shutdown", c_shutdown);
uim_scm_init_proc0("shutdown-how-alist?", c_shutdown_how_alist);
- uim_scm_gc_protect(&uim_lisp_shutdown_how_alist);
uim_lisp_shutdown_how_alist = make_arg_list(shutdown_how);
+ uim_scm_gc_protect(&uim_lisp_shutdown_how_alist);
uim_scm_init_proc0("make-sockaddr-storage", c_make_sockaddr_storage);
uim_scm_init_proc1("delete-sockaddr-storage", c_delete_sockaddr_storage);