about summary refs log tree commit diff
path: root/src/rt/rust_task.cpp
AgeCommit message (Collapse)AuthorLines
2011-08-15Added a library version of spawn. Before long, we can remove the old version.Eric Holk-15/+16
2011-08-15First step towards port handles.Eric Holk-2/+21
2011-08-08Introduced task handles.unknown-0/+2
This is the new way to refer to tasks in rust-land. Currently all they do is serve as a key to look up the old rust_task structure. Ideally they won't be ref counted, but baby steps.
2011-07-29Removing proxies and message queues.Eric Holk-9/+0
2011-07-28Do all runtime calls to getenv at initializationBrian Anderson-15/+12
getenv is not threadsafe and (maybe as a result) it's randomly crashing with CFLAGS=-g and RUST_THREADS=32. Calls from rust code are still on their own.
2011-07-28Atomic reference counting for tasks.Eric Holk-19/+4
2011-07-28Made task threads wait instead of sleep, so they can be woken up. This ↵Eric Holk-1/+7
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-28Adding a function to stdlib to set the min stack size, for programsEric Holk-1/+2
that absolutely will not succeed with a large default stack. This should be removed once we have stack grown working. Also updated word-count to succeed under the new test framework.
2011-07-28Per-thread scheduling. Closes #682.Eric Holk-5/+9
Tasks are spawned on a random thread. Currently they stay there, but we should add task migration and load balancing in the future. This should drammatically improve our task performance benchmarks.
2011-07-28Made root_task no longer special.Eric Holk-6/+4
2011-07-21Bump the stack size and make the RUST_MIN_STACK env variable accept hex values.Michael Sullivan-2/+2
2011-07-21Lots of work on memory tracking and channels.Eric Holk-5/+6
We're trying to get closer to doing correct move semantics for channel operations. This involves a lot of cleanup (such as removing the unused sched parameter from rust_vec constructor) and making circular_buffer kernel_owned. Added tagging for memory allocations. This means we give a string tag to everything we allocate. If we leak something and TRACK_ALLOCATIONS is enabled, then it's much easier now to tell exactly what is leaking.
2011-07-15Modify task::join to indicate how the task terminatedBrian Anderson-1/+3
This involves sticking yet another field into the task structure
2011-07-14Move the responsibility for process failure from tasks to the schedulerBrian Anderson-3/+2
When the root task fails the process fails. Failures on other tasks propagate up the task tree. Failures on non-root tasks without parents just (theoretically) unwind and disappear.
2011-07-13Prohibit trailing whitespace under 'tidy' script. Clean up all caught cases.Graydon Hoare-3/+3
2011-07-13Fix compile-command lines in rt.Graydon Hoare-1/+1
2011-07-13Remove obsolete nargs counts from runtime.Graydon Hoare-9/+6
2011-07-13Attempt to correct buggy win32 timer code (causing tinderbox failures).Graydon Hoare-2/+2
2011-07-08Added an environment variable to override the minimum stack size. Closes #637.Eric Holk-1/+10
2011-07-07Fixed two races.Eric Holk-0/+3
The first is that the memory_region destructor would complain there is still an outstanding allocation. This is because circular_buffer from rust_chan wasn't refing its task, so the task was being destructed too soon. The second was where the program could deadlock while joining a task. The target task would die in the time between checking whether the task should block and then actually blocking. The fix is to use the target task's lock.
2011-07-07Work on debugging race conditions.Eric Holk-0/+3
Ports and channels have been moved to the kernel pool, since they've been known to outlive their associated task. This probably isn't the right thing to do, the life cycle needs fixed instead. Some refactorying in memory_region.cpp. Added a helper function to increment and decrement the allocation counter. This makes it easier to switch between atomic and non-atomic increments. Using atomic increments for now, although this still does not fix the problem.
2011-07-07Removing the synchronized memory region from tasks.Eric Holk-50/+8
2011-07-07Removing most of the locks in rust_upcall.cpp and elsewhere.Eric Holk-18/+7
2011-07-06rt: Double stack sizePatrick Walton-1/+1
2011-07-06Added a task wakeup callback. Closes #599.Eric Holk-1/+10
The callback happens when a task moves from the "blocked" state to the "running" state. The callback is also inherited by child tasks. There is currently only a native API. This code hasn't been heavily exercised yet.
2011-06-29Added inheritance for task pinning. Closes #598 for real.Eric Holk-0/+6
2011-06-29Adding support for pinning tasks to the currently running thread. Closes #598.Eric Holk-3/+14
2011-06-28Renamed what's left of rust_dom to rust_schedulerEric Holk-70/+50
2011-06-28Fixed Win32 compile errors.Eric Holk-1/+1
2011-06-28Removed dom_owned, splitting things between task_owned and kernel_owned. Had ↵Eric Holk-17/+69
to re-xfail a few tests brson recently un-xfailed.
2011-06-28Moved thread management to rust_kernel.Eric Holk-5/+6
2011-06-27A little tidying in rt.Graydon Hoare-14/+13
2011-06-27Implementation mising features in lock_and_signal for Win32. Also lowered ↵Eric Holk-3/+3
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-11/+19
RUST_THREADS=8, so we're probably fairly safe now. In the future we can relax the synchronization to get better performance.
2011-06-27Added some locking to ports to prevent the case where two threads ↵Eric Holk-13/+4
simultaneously wake up a task blocked on a certain port.
2011-06-27Basic multithreading support. The infinite loops test successfully maxes out ↵Eric Holk-9/+20
the CPU.
2011-06-15Fixed a problem where spawn arguments were getting lost again. Also, fixed ↵Eric Holk-5/+5
up stack alignment, which closes #496
2011-06-15Step 1 of moving task startup to always be cdecl.Eric Holk-1/+1
2011-06-13This is the mega-ucontext commit. It replaces the task switching mechanism ↵Eric Holk-197/+58
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-05-27Switching over to wrappers for spawning functions of multiple arguments. ↵Eric Holk-6/+1
Doesn't quite work yet.
2011-05-27Working on 2 argument spawn. The arguments seem to be copied correctly once, ↵Eric Holk-2/+6
but then they get lost.
2011-05-26More delicious dead code removal from runtime, upcalls.Graydon Hoare-11/+2
2011-05-24Only one gc glue.Rafael Ávila de Espíndola-1/+1
2011-05-24There is only one yield glue.Rafael Ávila de Espíndola-1/+3
2011-05-24Remove dead code for unwind_glue.Rafael Ávila de Espíndola-2/+2
2011-05-24"constant propagate" rust_new_exit_task_glue to its only use.Rafael Ávila de Espíndola-4/+4
2011-05-18Remove dead rustboot code.Rafael Ávila de Espíndola-117/+0
2011-05-05Fix OS X build.Rafael Ávila de Espíndola-9/+9
2011-05-05Change the setup so that rust_activate_glue returns to rust_exit_task_glueRafael Ávila de Espíndola-38/+19
and rust_exit_task_glue calls the rust main. This is simpler since we only need to setup one frame. It also matches what ld.so does, so gdb is happy and stops a backtrace at rust_exit_task_glue instead of continuing past whatever function happened to be before rust_exit_task_glue is the object file. This is the rt part and should be merged after the rust0 part.
2011-05-04Try to fail nicely, again.Graydon Hoare-0/+2