diff options
Diffstat (limited to 'src/lanes.c')
-rw-r--r-- | src/lanes.c | 45 |
1 files changed, 25 insertions, 20 deletions
diff --git a/src/lanes.c b/src/lanes.c index 8f159a9..f3fdc76 100644 --- a/src/lanes.c +++ b/src/lanes.c | |||
@@ -1652,26 +1652,31 @@ LUAG_FUNC( thread_index) | |||
1652 | // Return a list of all known lanes | 1652 | // Return a list of all known lanes |
1653 | LUAG_FUNC( threads) | 1653 | LUAG_FUNC( threads) |
1654 | { | 1654 | { |
1655 | int const top = lua_gettop( L); | 1655 | int const top = lua_gettop( L); |
1656 | Universe* U = universe_get( L); | 1656 | Universe* U = universe_get( L); |
1657 | 1657 | ||
1658 | // List _all_ still running threads | 1658 | // List _all_ still running threads |
1659 | // | 1659 | // |
1660 | MUTEX_LOCK( &U->tracking_cs); | 1660 | MUTEX_LOCK( &U->tracking_cs); |
1661 | if( U->tracking_first && U->tracking_first != TRACKING_END) | 1661 | if( U->tracking_first && U->tracking_first != TRACKING_END) |
1662 | { | 1662 | { |
1663 | Lane* s = U->tracking_first; | 1663 | Lane* s = U->tracking_first; |
1664 | lua_newtable( L); // {} | 1664 | int index = 0; |
1665 | while( s != TRACKING_END) | 1665 | lua_newtable( L); // {} |
1666 | { | 1666 | while( s != TRACKING_END) |
1667 | lua_pushstring( L, s->debug_name); // {} "name" | 1667 | { |
1668 | push_thread_status( L, s); // {} "name" "status" | 1668 | // insert a { name, status } tuple, so that several lanes with the same name can't clobber each other |
1669 | lua_rawset( L, -3); // {} | 1669 | lua_newtable( L); // {} {} |
1670 | s = s->tracking_next; | 1670 | lua_pushstring( L, s->debug_name); // {} {} "name" |
1671 | } | 1671 | lua_setfield( L, -2, "name"); // {} {} |
1672 | } | 1672 | push_thread_status( L, s); // {} {} "status" |
1673 | MUTEX_UNLOCK( &U->tracking_cs); | 1673 | lua_setfield( L, -2, "status"); // {} {} |
1674 | return lua_gettop( L) - top; | 1674 | lua_rawseti( L, -2, ++ index); // {} |
1675 | s = s->tracking_next; | ||
1676 | } | ||
1677 | } | ||
1678 | MUTEX_UNLOCK( &U->tracking_cs); | ||
1679 | return lua_gettop( L) - top; // 0 or 1 | ||
1675 | } | 1680 | } |
1676 | #endif // HAVE_LANE_TRACKING | 1681 | #endif // HAVE_LANE_TRACKING |
1677 | 1682 | ||