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