shithub: riscv

Download patch

ref: 53fa826a8a695bcfade5c47f636f719c71e96b98
parent: 0d4b5b8a8a6e38faf3a07774f97dbf66797f8dea
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Wed Aug 16 10:45:39 EDT 2023

zuke: make stack usage independent of Biobuf's Bsize.

in mkplist:

make Biobuf static so we can live with default
8k mainstacksize.

move the qsort() call into metathread and give metathread
some extra stackspace as qsort() is recursive.

in zuke:

use our own 1k buffer for parsing /dev/volume, the default
8k or future 32k for Biobuf is way overkill for it.

--- a/sys/src/cmd/audio/zuke/mkplist.c
+++ b/sys/src/cmd/audio/zuke/mkplist.c
@@ -24,8 +24,6 @@
 	int keepfirstartist;
 };
 
-int mainstacksize = 32768;
-
 static int simplesort;
 static int moddec;
 static Channel *cmeta;
@@ -47,8 +45,10 @@
 	[Fmod] = "mod",
 };
 
+static int cmpmeta(void *, void *);
+
 static void
-metathread(void *)
+metathread(void *cexit)
 {
 	int max;
 	Meta *m;
@@ -63,6 +63,8 @@
 		}
 		tracks[ntracks++] = m;
 	}
+	qsort(tracks, ntracks, sizeof(Meta*), cmpmeta);
+	sendul(cexit, 0);
 
 	threadexits(nil);
 }
@@ -362,7 +364,7 @@
 	char *dir, *s, wd[4096];
 	Channel *cexit;
 	int i, nproc;
-	Biobuf out;
+	static Biobuf out;
 	Meta *m;
 
 	ARGBEGIN{
@@ -388,9 +390,10 @@
 		nproc = 1;
 	free(s);
 	for(i = 0; i < nproc; i++)
-		proccreate(tagreadproc, cexit, 16384);
+		proccreate(tagreadproc, cexit, 8*1024);
 
-	threadcreate(metathread, nil, 4096);
+	/* give metathread a large stack for qsort() */
+	threadcreate(metathread, cexit, 64*1024);
 
 	Binit(&out, 1, OWRITE);
 
@@ -422,8 +425,8 @@
 	for(i = 0; i < nproc; i++)
 		recvul(cexit);
 	chanclose(cmeta);
+	recvul(cexit);
 
-	qsort(tracks, ntracks, sizeof(Meta*), cmpmeta);
 	for(i = 0; i < ntracks; i++){
 		if(tracks[i]->numartist < 1)
 			fprint(2, "no artists: %s\n", tracks[i]->path);
--- a/sys/src/cmd/audio/zuke/zuke.c
+++ b/sys/src/cmd/audio/zuke/zuke.c
@@ -77,8 +77,6 @@
 	int rawsz;
 };
 
-int mainstacksize = 65536;
-
 static int debug;
 static int audio = -1;
 static int volume, rg;
@@ -152,13 +150,13 @@
 {
 	int f, x, ox, want, try;
 	char *s, *e;
-	Biobuf b;
+	Biobufhdr b;
+	uchar buf[1024];
 	char *n;
 
 	if((f = open("/dev/volume", ORDWR|OCEXEC)) < 0)
 		return;
-	Binit(&b, f, OREAD);
-
+	Binits(&b, f, OREAD, buf, sizeof(buf));
 	want = x = -1;
 	ox = 0;
 	for(try = 0; try < 10; try++){
@@ -181,9 +179,7 @@
 		while(Brdline(&b, '\n') != nil);
 		Bseek(&b, 0, 0);
 	}
-
 	volume = CLAMP(ox, 0, 100);
-
 	Bterm(&b);
 	close(f);
 }