export moo_backtrace()
added textual description for semaphore's io type
This commit is contained in:
		@ -474,7 +474,7 @@ void moo_setsynerr (moo_t* moo, moo_synerrnum_t num, const moo_ioloc_t* loc, con
 | 
				
			|||||||
 * STACK FRAME BACKTRACE
 | 
					 * STACK FRAME BACKTRACE
 | 
				
			||||||
 * -------------------------------------------------------------------------- */
 | 
					 * -------------------------------------------------------------------------- */
 | 
				
			||||||
#if defined(MOO_ENABLE_LIBUNWIND)
 | 
					#if defined(MOO_ENABLE_LIBUNWIND)
 | 
				
			||||||
static void backtrace_stack_frames (moo_t* moo)
 | 
					void moo_backtrace (moo_t* moo)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	unw_cursor_t cursor;
 | 
						unw_cursor_t cursor;
 | 
				
			||||||
	unw_context_t context;
 | 
						unw_context_t context;
 | 
				
			||||||
@ -503,7 +503,7 @@ static void backtrace_stack_frames (moo_t* moo)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#elif defined(HAVE_BACKTRACE)
 | 
					#elif defined(HAVE_BACKTRACE)
 | 
				
			||||||
static void backtrace_stack_frames (moo_t* moo)
 | 
					void moo_backtrace (moo_t* moo)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	void* btarray[128];
 | 
						void* btarray[128];
 | 
				
			||||||
	moo_oow_t btsize;
 | 
						moo_oow_t btsize;
 | 
				
			||||||
@ -524,7 +524,7 @@ static void backtrace_stack_frames (moo_t* moo)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
static void backtrace_stack_frames (moo_t* moo)
 | 
					void moo_backtrace (moo_t* moo)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* do nothing. not supported */
 | 
						/* do nothing. not supported */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -537,8 +537,11 @@ static void backtrace_stack_frames (moo_t* moo)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void moo_assertfailed (moo_t* moo, const moo_bch_t* expr, const moo_bch_t* file, moo_oow_t line)
 | 
					void moo_assertfailed (moo_t* moo, const moo_bch_t* expr, const moo_bch_t* file, moo_oow_t line)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					#if defined(MOO_BUILD_RELEASE)
 | 
				
			||||||
 | 
						/* do nothing */
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
	moo_logbfmt (moo, MOO_LOG_UNTYPED | MOO_LOG_FATAL, "ASSERTION FAILURE: %s at %s:%zu\n", expr, file, line);
 | 
						moo_logbfmt (moo, MOO_LOG_UNTYPED | MOO_LOG_FATAL, "ASSERTION FAILURE: %s at %s:%zu\n", expr, file, line);
 | 
				
			||||||
	backtrace_stack_frames (moo);
 | 
						moo_backtrace (moo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(_WIN32)
 | 
					#if defined(_WIN32)
 | 
				
			||||||
	ExitProcess (249);
 | 
						ExitProcess (249);
 | 
				
			||||||
@ -565,4 +568,6 @@ void moo_assertfailed (moo_t* moo, const moo_bch_t* expr, const moo_bch_t* file,
 | 
				
			|||||||
	kill (getpid(), SIGABRT);
 | 
						kill (getpid(), SIGABRT);
 | 
				
			||||||
	_exit (1);
 | 
						_exit (1);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -32,6 +32,12 @@
 | 
				
			|||||||
#define PROC_STATE_SUSPENDED 0
 | 
					#define PROC_STATE_SUSPENDED 0
 | 
				
			||||||
#define PROC_STATE_TERMINATED -1
 | 
					#define PROC_STATE_TERMINATED -1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char* io_type_str[] =
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						"input",
 | 
				
			||||||
 | 
						"output"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static MOO_INLINE const char* proc_state_to_string (int state)
 | 
					static MOO_INLINE const char* proc_state_to_string (int state)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static const moo_bch_t* str[] = 
 | 
						static const moo_bch_t* str[] = 
 | 
				
			||||||
@ -1223,7 +1229,7 @@ static int add_sem_to_sem_io_tuple (moo_t* moo, moo_oop_semaphore_t sem, moo_ooi
 | 
				
			|||||||
	{
 | 
						{
 | 
				
			||||||
		if (moo->sem_io_tuple[index].sem[io_type])
 | 
							if (moo->sem_io_tuple[index].sem[io_type])
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			moo_seterrbfmt (moo, MOO_EINVAL, "handle %zd linked with an IO semaphore of type %d", io_handle, (int)io_type);
 | 
								moo_seterrbfmt (moo, MOO_EINVAL, "handle %zd already linked with an IO semaphore for %hs", io_handle, io_type_str[io_type]);
 | 
				
			||||||
			return -1;
 | 
								return -1;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1237,11 +1243,11 @@ static int add_sem_to_sem_io_tuple (moo_t* moo, moo_oop_semaphore_t sem, moo_ooi
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (n <= -1) 
 | 
						if (n <= -1) 
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		MOO_LOG3 (moo, MOO_LOG_WARN, "Failed to add an IO semaphore at index %zd of type %d on handle %zd\n", index, (int)io_type, io_handle);
 | 
							MOO_LOG3 (moo, MOO_LOG_WARN, "Failed to add an IO semaphore at index %zd for %hs on handle %zd\n", index, io_type_str[io_type], io_handle);
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	MOO_LOG3 (moo, MOO_LOG_DEBUG, "Added an IO semaphore at index %zd of type %d on handle %zd\n", index, (int)io_type, io_handle);
 | 
						MOO_LOG3 (moo, MOO_LOG_DEBUG, "Added an IO semaphore at index %zd for %hs on handle %zd\n", index, io_type_str[io_type], io_handle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sem->subtype = MOO_SMOOI_TO_OOP(MOO_SEMAPHORE_SUBTYPE_IO);
 | 
						sem->subtype = MOO_SMOOI_TO_OOP(MOO_SEMAPHORE_SUBTYPE_IO);
 | 
				
			||||||
	sem->u.io.index = MOO_SMOOI_TO_OOP(index);
 | 
						sem->u.io.index = MOO_SMOOI_TO_OOP(index);
 | 
				
			||||||
@ -1304,7 +1310,7 @@ static int delete_sem_from_sem_io_tuple (moo_t* moo, moo_oop_semaphore_t sem, in
 | 
				
			|||||||
	moo_poptmp (moo);
 | 
						moo_poptmp (moo);
 | 
				
			||||||
	if (x <= -1) 
 | 
						if (x <= -1) 
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		MOO_LOG3 (moo, MOO_LOG_WARN, "Failed to delete an IO semaphored handle %zd at index %zd of type %d\n", io_handle, index, (int)io_type);
 | 
							MOO_LOG3 (moo, MOO_LOG_WARN, "Failed to delete an IO semaphored handle %zd at index %zd for %hs\n", io_handle, index, io_type_str[io_type]);
 | 
				
			||||||
		if (!force) return -1;
 | 
							if (!force) return -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* NOTE: 
 | 
							/* NOTE: 
 | 
				
			||||||
@ -1317,7 +1323,7 @@ static int delete_sem_from_sem_io_tuple (moo_t* moo, moo_oop_semaphore_t sem, in
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		MOO_LOG3 (moo, MOO_LOG_DEBUG, "Deleted an IO semaphored handle %zd at index %zd of type %d\n", io_handle, index, (int)io_type);
 | 
							MOO_LOG3 (moo, MOO_LOG_DEBUG, "Deleted an IO semaphored handle %zd at index %zd for %hs\n", io_handle, index, io_type_str[io_type]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sem->subtype = moo->_nil;
 | 
						sem->subtype = moo->_nil;
 | 
				
			||||||
@ -1420,7 +1426,9 @@ static void signal_io_semaphore (moo_t* moo, moo_ooi_t io_handle, moo_ooi_t mask
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		MOO_LOG1 (moo, MOO_LOG_WARN, "Warning - semaphore signaling requested on an unmapped handle %zd\n", io_handle);
 | 
							/* you may come across this warning message if the multiplexer returned
 | 
				
			||||||
 | 
							 * an IO event */
 | 
				
			||||||
 | 
							MOO_LOG2 (moo, MOO_LOG_WARN, "Warning - semaphore signaling requested on an unmapped handle %zd with mask %#zx\n", io_handle, mask);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -2710,7 +2718,7 @@ static moo_pfrc_t __system_add_io_semaphore (moo_t* moo, moo_ooi_t nargs, moo_se
 | 
				
			|||||||
	if (add_sem_to_sem_io_tuple(moo, sem, MOO_OOP_TO_SMOOI(fd), io_type) <= -1) 
 | 
						if (add_sem_to_sem_io_tuple(moo, sem, MOO_OOP_TO_SMOOI(fd), io_type) <= -1) 
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		const moo_ooch_t* oldmsg = moo_backuperrmsg(moo);
 | 
							const moo_ooch_t* oldmsg = moo_backuperrmsg(moo);
 | 
				
			||||||
		moo_seterrbfmt (moo, moo->errnum, "cannot add the handle %zd to the multiplexer - %js", MOO_OOP_TO_SMOOI(fd), oldmsg);
 | 
							moo_seterrbfmt (moo, moo->errnum, "unable to add the handle %zd to the multiplexer for %hs - %js", MOO_OOP_TO_SMOOI(fd), io_type_str[io_type], oldmsg);
 | 
				
			||||||
		return MOO_PF_FAILURE;
 | 
							return MOO_PF_FAILURE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2242,6 +2242,10 @@ MOO_EXPORT int moo_decode (
 | 
				
			|||||||
	const moo_oocs_t* classfqn
 | 
						const moo_oocs_t* classfqn
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MOO_EXPORT void moo_backtrace (
 | 
				
			||||||
 | 
						moo_t*           moo
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MOO_EXPORT void moo_assertfailed (
 | 
					MOO_EXPORT void moo_assertfailed (
 | 
				
			||||||
	moo_t*           moo,
 | 
						moo_t*           moo,
 | 
				
			||||||
	const moo_bch_t* expr,
 | 
						const moo_bch_t* expr,
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user