mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	This commit prevents the stack from being marked twice: once via the Fiber, and once via the Thread. It introduces an assertion to assert that the ec on the thread is the same as the ec on the Fiber being marked via the thread.
		
			
				
	
	
		
			26 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef INTERNAL_CONT_H                                  /*-*-C-*-vi:se ft=c:*/
 | 
						|
#define INTERNAL_CONT_H
 | 
						|
/**
 | 
						|
 * @author     Ruby developers <ruby-core@ruby-lang.org>
 | 
						|
 * @copyright  This  file  is   a  part  of  the   programming  language  Ruby.
 | 
						|
 *             Permission  is hereby  granted,  to  either redistribute  and/or
 | 
						|
 *             modify this file, provided that  the conditions mentioned in the
 | 
						|
 *             file COPYING are met.  Consult the file for details.
 | 
						|
 * @brief      Internal header for Fiber.
 | 
						|
 */
 | 
						|
#include "ruby/ruby.h"          /* for VALUE */
 | 
						|
 | 
						|
struct rb_thread_struct;        /* in vm_core.h */
 | 
						|
struct rb_fiber_struct;         /* in cont.c */
 | 
						|
struct rb_execution_context_struct; /* in vm_core.c */
 | 
						|
 | 
						|
/* cont.c */
 | 
						|
void rb_fiber_reset_root_local_storage(struct rb_thread_struct *);
 | 
						|
void ruby_register_rollback_func_for_ensure(VALUE (*ensure_func)(VALUE), VALUE (*rollback_func)(VALUE));
 | 
						|
void rb_fiber_init_mjit_cont(struct rb_fiber_struct *fiber);
 | 
						|
 | 
						|
VALUE rb_fiberptr_self(struct rb_fiber_struct *fiber);
 | 
						|
unsigned int rb_fiberptr_blocking(struct rb_fiber_struct *fiber);
 | 
						|
struct rb_execution_context_struct * rb_fiberptr_get_ec(struct rb_fiber_struct *fiber);
 | 
						|
 | 
						|
#endif /* INTERNAL_CONT_H */
 |