xref: /plan9/sys/src/libthread/lib.c (revision 14cc0f535177405a84c5b73603a98e5db6674719)
19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier #include <thread.h>
49a747e4fSDavid du Colombier #include "threadimpl.h"
59a747e4fSDavid du Colombier 
69a747e4fSDavid du Colombier static long totalmalloc;
79a747e4fSDavid du Colombier 
89a747e4fSDavid du Colombier void*
_threadmalloc(long size,int z)99a747e4fSDavid du Colombier _threadmalloc(long size, int z)
109a747e4fSDavid du Colombier {
119a747e4fSDavid du Colombier 	void *m;
129a747e4fSDavid du Colombier 
139a747e4fSDavid du Colombier 	m = malloc(size);
149a747e4fSDavid du Colombier 	if (m == nil)
15*14cc0f53SDavid du Colombier 		sysfatal("Malloc of size %ld failed: %r", size);
169a747e4fSDavid du Colombier 	setmalloctag(m, getcallerpc(&size));
179a747e4fSDavid du Colombier 	totalmalloc += size;
187366567fSDavid du Colombier 	if (size > 100000000) {
199a747e4fSDavid du Colombier 		fprint(2, "Malloc of size %ld, total %ld\n", size, totalmalloc);
209a747e4fSDavid du Colombier 		abort();
219a747e4fSDavid du Colombier 	}
229a747e4fSDavid du Colombier 	if (z)
239a747e4fSDavid du Colombier 		memset(m, 0, size);
249a747e4fSDavid du Colombier 	return m;
259a747e4fSDavid du Colombier }
269a747e4fSDavid du Colombier 
279a747e4fSDavid du Colombier void
_threadsysfatal(char * fmt,va_list arg)289a747e4fSDavid du Colombier _threadsysfatal(char *fmt, va_list arg)
299a747e4fSDavid du Colombier {
309a747e4fSDavid du Colombier 	char buf[1024];	/* size doesn't matter; we're about to exit */
319a747e4fSDavid du Colombier 
329a747e4fSDavid du Colombier 	vseprint(buf, buf+sizeof(buf), fmt, arg);
339a747e4fSDavid du Colombier 	if(argv0)
349a747e4fSDavid du Colombier 		fprint(2, "%s: %s\n", argv0, buf);
359a747e4fSDavid du Colombier 	else
369a747e4fSDavid du Colombier 		fprint(2, "%s\n", buf);
379a747e4fSDavid du Colombier 	threadexitsall(buf);
389a747e4fSDavid du Colombier }
39