summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>1992-08-13 14:13:11 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>1992-08-13 14:13:11 (GMT)
commit743db36cd208c6f212a6b534e6bb8ee9256505ad (patch)
tree4fd1cb1b4cfd05d3f6962df90b563cd71641a680
parent1738388c59c0fb727f73024e469aae59dda43ae7 (diff)
downloadcpython-743db36cd208c6f212a6b534e6bb8ee9256505ad.zip
cpython-743db36cd208c6f212a6b534e6bb8ee9256505ad.tar.gz
cpython-743db36cd208c6f212a6b534e6bb8ee9256505ad.tar.bz2
Modified to allow other threads to run in a multithreaded environment.
-rw-r--r--Modules/almodule.c6
-rw-r--r--Modules/cstubs27
-rw-r--r--Modules/flmodule.c28
-rw-r--r--Modules/sgimodule.c3
4 files changed, 63 insertions, 1 deletions
diff --git a/Modules/almodule.c b/Modules/almodule.c
index 36cdedd..044baae 100644
--- a/Modules/almodule.c
+++ b/Modules/almodule.c
@@ -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},
diff --git a/Modules/cstubs b/Modules/cstubs
index 89ac69d..bbb3a10 100644
--- a/Modules/cstubs
+++ b/Modules/cstubs
@@ -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.
diff --git a/Modules/flmodule.c b/Modules/flmodule.c
index bd5ff56..796e297 100644
--- a/Modules/flmodule.c
+++ b/Modules/flmodule.c
@@ -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);
diff --git a/Modules/sgimodule.c b/Modules/sgimodule.c
index fca4806..1951ad8 100644
--- a/Modules/sgimodule.c
+++ b/Modules/sgimodule.c
@@ -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;
}