]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Modified to allow other threads to run in a multithreaded environment.
authorJack Jansen <jack.jansen@cwi.nl>
Thu, 13 Aug 1992 14:13:11 +0000 (14:13 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Thu, 13 Aug 1992 14:13:11 +0000 (14:13 +0000)
Modules/almodule.c
Modules/cstubs
Modules/flmodule.c
Modules/sgimodule.c

index 36cdedd32fa4aadc7541c4906f1dee38a884c1e3..044baaeac0d3005422dbf2815c9a602273a5ba02 100644 (file)
@@ -30,6 +30,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "import.h"
 #include "modsupport.h"
 #include "structmember.h"
+#include "ceval.h"
 
 
 /* Config objects */
@@ -274,7 +275,9 @@ al_readsamps (self, args)
        v = newsizedstringobject ((char *)NULL, width * count);
        if (v == NULL) return NULL;
 
+       BGN_SAVE
        ALreadsamps (self-> ob_port, (void *) getstringvalue(v), count);
+       END_SAVE
 
        return (v);
 }
@@ -294,7 +297,9 @@ al_writesamps (self, args)
        c = ALgetconfig(self->ob_port);
        width = ALgetwidth(c);
        ALfreeconfig(c);
+       BGN_SAVE
        ALwritesamps (self-> ob_port, (void *) buf, (long) size / width);
+       END_SAVE
 
        INCREF (None);
        return None;
@@ -361,6 +366,7 @@ al_getconfig (self, args)
 static struct methodlist port_methods[] = {
        {"closeport",           al_closeport},
        {"getfd",               al_getfd},
+        {"fileno",             al_getfd},
        {"getfilled",           al_getfilled},
        {"getfillable",         al_getfillable},
        {"readsamps",           al_readsamps},
index 89ac69deeaeb2761a0e645436952a57150e8243a..bbb3a10637da7fd0887ea3b5223becbfe0c2ddea 100644 (file)
@@ -25,6 +25,11 @@ Each definition must be contained on one line:
                N*retval
 */
 
+/*
+ * An attempt has been made to make this module switch threads on qread
+ * calls. It is far from safe, though.
+ */
+
 #include <gl.h>
 #include <device.h>
 
@@ -32,6 +37,7 @@ Each definition must be contained on one line:
 #include "import.h"
 #include "modsupport.h"
 #include "cgensupport.h"
+#include "ceval.h"
 
 /*
 Some stubs are too complicated for the stub generator.
@@ -40,6 +46,27 @@ A line starting with '%' gives the name of the function so the stub
 generator can include it in the table of functions.
 */
 
+% qread
+
+static object *
+gl_qread(self, args)
+       object *self;
+       object *args;
+{
+       long retval;
+       short arg1 ;
+       BGN_SAVE
+       retval = qread( & arg1 );
+       END_SAVE
+       { object *v = newtupleobject( 2 );
+         if (v == NULL) return NULL;
+         settupleitem(v, 0, mknewlongobject(retval));
+         settupleitem(v, 1, mknewshortobject(arg1));
+         return v;
+       }
+}
+
+
 /*
 varray -- an array of v.. calls.
 The argument is an array (maybe list or tuple) of points.
index bd5ff56666f74e643227549bea6e5c0f18bbc3c6..796e297ff0f13437d08021f0b51119f9019b5f52 100644 (file)
@@ -29,6 +29,16 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    and possibly also with previous versions.
    (You must also edit FL.py to set _v15 to 1.) */
 
+/* A half-hearted attempt has been made to allow programs using this
+ * module to exploit parallelism (through the threads module). No provisions
+ * have been made for multiple threads to use this module at the same time,
+ * though. So, a program with a forms thread and a non-forms thread will work
+ * fine but a program with two threads using forms will probably crash (unless
+ * the program takes precaution to ensure that only one thread can be in
+ * this module at any time). This will have to be fixed some time.
+ * (A fix will probably also have to synchronise with the gl module).
+ */
+
 #include "forms.h"
 
 #include "allobjects.h"
@@ -1964,7 +1974,9 @@ forms_do_or_check_forms(dummy, args, func)
                return NULL;
 
        for (;;) {
+               BGN_SAVE
                generic = (*func)();
+               END_SAVE
                if (generic == NULL) {
                        INCREF(None);
                        return None;
@@ -2131,7 +2143,9 @@ forms_qread(self, args)
 {
        long retval;
        short arg1 ;
+       BGN_SAVE
        retval = fl_qread(&arg1);
+       END_SAVE
        { object *v = newtupleobject(2);
          if (v == NULL) return NULL;
          settupleitem(v, 0, newintobject(retval));
@@ -2273,7 +2287,9 @@ forms_show_message(f, args)
 
         if (!getargs(args, "(sss)", &a, &b, &c)) return NULL;
 
+       BGN_SAVE
        fl_show_message(a, b, c);
+       END_SAVE
 
        INCREF(None);
        return None;
@@ -2287,6 +2303,7 @@ forms_show_choice(f, args)
        char *m1, *m2, *m3, *b1, *b2, *b3;
        int nb;
        char *format;
+       int rv;
 
        if (args == NULL || !is_tupleobject(args)) {
                err_badarg();
@@ -2314,7 +2331,10 @@ forms_show_choice(f, args)
         if (!getargs(args, format, &m1, &m2, &m3, &b1, &b2, &b3))
                return NULL;
 
-       return newintobject(fl_show_choice(m1, m2, m3, nb, b1, b2, b3));
+       BGN_SAVE
+       rv = fl_show_choice(m1, m2, m3, nb, b1, b2, b3);
+       END_SAVE
+       return newintobject(rv);
 }
 
 static object *
@@ -2327,7 +2347,9 @@ forms_show_question(f, args)
 
         if (!getargs(args, "(sss)", &a, &b, &c)) return NULL;
 
+       BGN_SAVE
        ret = fl_show_question(a, b, c);
+       END_SAVE
    
         return newintobject((long) ret);
 }
@@ -2342,7 +2364,9 @@ forms_show_input(f, args)
 
         if (!getstrstrarg(args, &a, &b)) return NULL;
 
+       BGN_SAVE
        str = fl_show_input(a, b);
+       END_SAVE
 
        if (str == NULL) {
                INCREF(None);
@@ -2361,7 +2385,9 @@ forms_file_selector(f, args)
 
         if (!getargs(args, "(ssss)", &a, &b, &c, &d)) return NULL;
 
+       BGN_SAVE
        str = fl_show_file_selector(a, b, c, d);
+       END_SAVE
    
        if (str == NULL) {
                INCREF(None);
index fca4806692b9ce150ecdd122a72e5050020fe97b..1951ad8bc98508f759504ab3db6dbd9ab157fb6c 100644 (file)
@@ -26,6 +26,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "allobjects.h"
 #include "modsupport.h"
+#include "ceval.h"
 
 extern int sginap(long);
 
@@ -37,7 +38,9 @@ sgi_nap(self, args)
        long ticks;
        if (!getargs(args, "l", &ticks))
                return NULL;
+       BGN_SAVE
        sginap(ticks);
+       END_SAVE
        INCREF(None);
        return None;
 }