commit 29e130a

Devine Lu Linvega  ·  2023-05-03 17:26:28 +0000 UTC
parent 1be9024
Removed arguments array for friends/tasks
2 files changed,  +20, -24
+19, -24
 1@@ -78,38 +78,39 @@ system_inspect(Uxn *u)
 2 /* Friends */
 3 
 4 Uint8 *global_ram;
 5-Uint16 friends_tasks[0x80];
 6-pthread_t friends[0x80];
 7+Uint16 friends_tasks[MAX_FRIENDS];
 8+pthread_t friends[MAX_FRIENDS];
 9 int friends_count = 0;
10-int friends_args[0x80];
11 
12 void *
13-friend_task(void *x)
14+friend_task(void *vector)
15 {
16 	Uxn friend;
17 	uxn_boot(&friend, global_ram);
18-	uxn_eval(&friend, friends_tasks[*((int *)x)]);
19+	uxn_eval(&friend, *((Uint16 *)vector));
20 	return NULL;
21 }
22 
23 int
24-spawn_friend(Uint16 task)
25-{
26-	if(friends_count >= 0x80)
27-		return system_error("friends", "Too many threads");
28-	friends_args[friends_count] = friends_count;
29-	friends_tasks[friends_count] = task;
30-	pthread_create(&friends[friends_count], NULL, friend_task, (void *)&friends_args[friends_count]);
31-	return friends_count++;
32-}
33-
34-void
35 wait_friends(void)
36 {
37 	int i;
38 	for(i = 0; i < friends_count; ++i)
39 		pthread_join(friends[i], NULL);
40-	friends_count = 0;
41+	return friends_count = 0;
42+}
43+
44+int
45+spawn_friend(Uint8 *ram, Uint16 task)
46+{
47+	if(!task)
48+		return wait_friends();
49+	if(friends_count >= MAX_FRIENDS)
50+		return system_error("friends", "Too many threads");
51+	global_ram = ram;
52+	friends_tasks[friends_count] = task;
53+	pthread_create(&friends[friends_count], NULL, friend_task, (void *)&friends_tasks[friends_count]);
54+	return friends_count++;
55 }
56 
57 /* IO */
58@@ -117,18 +118,12 @@ wait_friends(void)
59 void
60 system_deo(Uxn *u, Uint8 *d, Uint8 port)
61 {
62-	Uint16 v;
63 	switch(port) {
64 	case 0x3:
65 		system_cmd(u->ram, PEEK2(d + 2));
66 		break;
67 	case 0x5:
68-		v = PEEK2(d + 4);
69-		global_ram = u->ram;
70-		if(v)
71-			spawn_friend(v);
72-		else
73-			wait_friends();
74+		spawn_friend(u->ram, PEEK2(d + 4));
75 		break;
76 	case 0xe:
77 		system_inspect(u);
+1, -0
1@@ -10,6 +10,7 @@ WITH REGARD TO THIS SOFTWARE.
2 */
3 
4 #define RAM_PAGES 0x10
5+#define MAX_FRIENDS 0x10
6 
7 #define CONSOLE_STD 0x1
8 #define CONSOLE_ARG 0x2