about summary refs log tree commit diff
path: root/src/rt/sync/lock_and_signal.cpp
AgeCommit message (Collapse)AuthorLines
2013-11-18Remove the C++ lock_and_signal typeAlex Crichton-205/+0
A the same time this purges all runtime support needed for statically initialized mutexes, moving all users over to the new Mutex type instead.
2013-11-13add rust_trylock_little_lockJason Toffaletti-0/+26
Try to acquire lock and succeed only if lock is not already held. Uses TryEnterCriticalSection or pthread_mutex_trylock.
2012-12-10Add license boilerplate to more files.Graydon Hoare-0/+10
2012-07-12Comments only: TODOs to FIXME in the runtimeTim Chevalier-1/+2
2012-06-21Tag all remaining FIXMEs with bugs. Install rule in tidy script to enforce this.Graydon Hoare-1/+2
2012-04-03Refactor includes structure, getting rid of rust_internal.hJon Morton-3/+2
Many changes to code structure are included: - removed TIME_SLICE_IN_MS - removed sychronized_indexed_list - removed region_owned - kernel_owned move to kernel.h, task_owned moved to task.h - global configs moved to rust_globals.h - changed #pragma once to standard guard in rust_upcall.h - got rid of memory.h
2012-04-01Merge remote-tracking branch 'brson/mainthread'Brian Anderson-0/+59
Conflicts: src/rt/rust_sched_loop.cpp src/rt/rust_shape.cpp src/rt/rust_task.cpp
2012-03-31rt: Fix whitespaceBrian Anderson-1/+2
2012-03-31Revert "rt: Remove lock_held_by_current_thread"Brian Anderson-0/+59
Adds back the ability to make assertions about locks, but only under the --enable-debug configuration This reverts commit b247de64583e2ab527088813ba9192824554e801. Conflicts: src/rt/rust_sched_loop.cpp
2012-03-28Tidy up multiple declarations and STDC_FOO_MACROS guards in headers.Graydon Hoare-1/+1
2012-03-18rt: Remove lock_held_by_current_threadBrian Anderson-26/+0
2012-03-13rt: Remove an incorrect assert in lock_and_signalBrian Anderson-1/+0
This assert doesn't hold because it isn't made while holding the lock
2012-02-19rt: Add some lock_and_signal assertionsChris Peterson-0/+5
Assert that locks are not reentered on the same thread, unlocked by a different thread, or deleted while locked.
2012-02-19rt: Initialize Windows CRITICAL_SECTION with non-zero spin countChris Peterson-1/+12
If a CRITICAL_SECTION is not initialized with a spin count, it will default to 0, even on multi-processor systems. MSDN suggests using 4000. On single-processor systems, the spin count parameter is ignored and the critical section's spin count defaults to 0. For Windows >= Vista, extra debug info is allocated for CRITICAL_SECTIONs but not released in a timely manner. Consider using InitializeCriticalSectionEx(CRITICAL_SECTION_NO_DEBUG_INFO).
2012-02-19rt: Delete Windows CRITICAL_SECTION in dtorChris Peterson-0/+1
2012-02-02rt: Change the win32 event object to an auto-reset eventBrian Anderson-1/+1
The way I read the docs, having this be a manual reset event means that after the first time it's signalled it stays that way until reset, and we never, ever reset it.
2012-02-02rt: Remove lock_and_signal::signal_allBrian Anderson-16/+0
2012-02-02rt: Remove lock_and_signal::timed_waitBrian Anderson-35/+2
2012-02-01rt: Fix lock_held_by_current_threadBrian Anderson-7/+12
This simplifies the check for thread ownership by removing the _locked flag and just comparing against the thread ID of the last thread to take the lock. If the running thread took the lock _holding_thread will be equal to pthread_self(); if _holding_thread is some other value then the running thread does not have the lock. Setting a pthread_t to 0 like this is not portable but should work on every platform we are likely to care about for the near future.
2012-02-01rt: Remove unused variable from lock_and_signalBrian Anderson-3/+1
2011-08-03timeout_in_ns was renamed to timeout_in_ms.Erick Tryzelaar-1/+1
2011-08-03Sleep for a nonzero amount of time on Windows.Eric Holk-3/+3
2011-07-28Updating to work on Windows.Eric Holk-1/+2
2011-07-28Adding upcalls to to ref() and deref() tasks. This is the first step towards ↵Eric Holk-1/+1
atomic reference counting of tasks.
2011-07-28Made task threads wait instead of sleep, so they can be woken up. This ↵Eric Holk-4/+30
appears to give us much better parallel performance. Also, commented out one more unsafe log and updated rust_kernel.cpp to compile under g++
2011-07-13Prohibit trailing whitespace under 'tidy' script. Clean up all caught cases.Graydon Hoare-1/+1
2011-06-27A little tidying in rt.Graydon Hoare-1/+1
2011-06-27Implementation mising features in lock_and_signal for Win32. Also lowered ↵Eric Holk-4/+4
the minimum stack size to get the pfib benchmark to run without exhausting its address space on Windows.
2011-06-27Conservatively serialize nearly all upcalls. Successfuly ran make check with ↵Eric Holk-1/+3
RUST_THREADS=8, so we're probably fairly safe now. In the future we can relax the synchronization to get better performance.
2011-06-27Basic multithreading support. The infinite loops test successfully maxes out ↵Eric Holk-0/+23
the CPU.
2011-06-13This is the mega-ucontext commit. It replaces the task switching mechanism ↵Eric Holk-10/+10
with a new one inspired by ucontext. It works under Linux, OS X and Windows, and is Valgrind clean on Linux and OS X (provided the runtime is built with gcc). This commit also moves yield and join to the standard library, as requested in #42. Join is currently a no-op though.
2011-06-09Remove executable bit from lock_and_signal.cpp.Erick Tryzelaar-0/+0
2010-09-10Added lock_and_signal::signal_all(), and made the rust_kernel::join() use ↵Michael Bebenita-9/+24
wait instead of yield.
2010-09-08Tidy up the sync dir, remove dead or mis-designed code in favour of OS ↵Graydon Hoare-0/+97
primitives, switch rust_kernel to use a lock/signal pair and wait rather than spin.