mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-16 09:17:35 +02:00
Build-out of mutex lock/unlock
This commit is contained in:
parent
de33b567a3
commit
ef61c578c5
2 changed files with 19 additions and 6 deletions
|
@ -124,7 +124,7 @@ object Cyc_vector_set(void *d, object v, object k, object obj);
|
||||||
object Cyc_make_vector(void *data, object cont, object len, object fill);
|
object Cyc_make_vector(void *data, object cont, object len, object fill);
|
||||||
object Cyc_list2vector(void *data, object cont, object l);
|
object Cyc_list2vector(void *data, object cont, object l);
|
||||||
object Cyc_make_mutex(void *data);
|
object Cyc_make_mutex(void *data);
|
||||||
object Cyc_mutex_lock(void *data, object obj);
|
object Cyc_mutex_lock(void *data, object cont, object obj);
|
||||||
object Cyc_mutex_unlock(void *data, object obj);
|
object Cyc_mutex_unlock(void *data, object obj);
|
||||||
object Cyc_number2string(void *d, object cont, object n);
|
object Cyc_number2string(void *d, object cont, object n);
|
||||||
object Cyc_symbol2string(void *d, object cont, object sym) ;
|
object Cyc_symbol2string(void *d, object cont, object sym) ;
|
||||||
|
|
23
runtime.c
23
runtime.c
|
@ -1244,14 +1244,27 @@ object Cyc_make_mutex(void *data) {
|
||||||
return lock;
|
return lock;
|
||||||
}
|
}
|
||||||
|
|
||||||
object Cyc_mutex_lock(void *data, object obj) {
|
object Cyc_mutex_lock(void *data, object cont, object obj) {
|
||||||
// TODO: set for cooperation
|
mutex m = (mutex) obj;
|
||||||
// TODO: actually lock
|
Cyc_check_mutex(data, obj);
|
||||||
|
gc_mutator_thread_blocked((gc_thread_data *)data, cont);
|
||||||
|
if (pthread_mutex_lock(&(m->lock)) != 0) {
|
||||||
|
fprintf(stderr, "Error locking mutex\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
gc_mutator_thread_runnable(
|
||||||
|
(gc_thread_data *)data,
|
||||||
|
boolean_t);
|
||||||
return boolean_t;
|
return boolean_t;
|
||||||
}
|
}
|
||||||
|
|
||||||
object Cyc_mutex_unlock(void *data, object obj) {
|
object Cyc_mutex_unlock(void *data, object obj) {
|
||||||
// TODO: actually unlock
|
mutex m = (mutex) obj;
|
||||||
|
Cyc_check_mutex(data, obj);
|
||||||
|
if (pthread_mutex_unlock(&(m->lock)) != 0) {
|
||||||
|
fprintf(stderr, "Error unlocking mutex\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
return boolean_t;
|
return boolean_t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1919,7 +1932,7 @@ void _Cyc_make_mutex(void *data, object cont, object args) {
|
||||||
return_closcall1(data, cont, c); }}
|
return_closcall1(data, cont, c); }}
|
||||||
void _Cyc_mutex_lock(void *data, object cont, object args) {
|
void _Cyc_mutex_lock(void *data, object cont, object args) {
|
||||||
Cyc_check_num_args(data, "mutex-lock!", 1, args);
|
Cyc_check_num_args(data, "mutex-lock!", 1, args);
|
||||||
{ object c = Cyc_mutex_lock(data, car(args));
|
{ object c = Cyc_mutex_lock(data, cont, car(args));
|
||||||
return_closcall1(data, cont, c); }}
|
return_closcall1(data, cont, c); }}
|
||||||
void _Cyc_mutex_unlock(void *data, object cont, object args) {
|
void _Cyc_mutex_unlock(void *data, object cont, object args) {
|
||||||
Cyc_check_num_args(data, "mutex-unlock!", 1, args);
|
Cyc_check_num_args(data, "mutex-unlock!", 1, args);
|
||||||
|
|
Loading…
Add table
Reference in a new issue