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);

Reply via email to