+#include <string.h>
#ifdef _WIN32
#include <windows.h>
#else
#ifdef _WIN32
CreateThread(0, 0, threadtop, td, 0, 0);
#else
- { pthread_t t; pthread_create(&t, 0, threadtop, td); }
+ {
+ pthread_t t; int err;
+ if((err = pthread_create(&t, 0, threadtop, td)))
+ naRuntimeError(c, "newthread failed: %s", strerror(err));
+ pthread_detach(t);
+ }
#endif
return naNil();
}
static naRef f_lock(naContext c, naRef me, int argc, naRef* args)
{
- if(argc > 0 && naGhost_type(args[0]) == &LockType)
+ if(argc > 0 && naGhost_type(args[0]) == &LockType) {
+ naModUnlock();
naLock(naGhost_ptr(args[0]));
+ naModLock();
+ }
return naNil();
}
static naRef f_semdown(naContext c, naRef me, int argc, naRef* args)
{
- if(argc > 0 && naGhost_type(args[0]) == &SemType)
+ if(argc > 0 && naGhost_type(args[0]) == &SemType) {
+ naModUnlock();
naSemDown(naGhost_ptr(args[0]));
+ naModLock();
+ }
return naNil();
}