fixed log mask parsing in main.c.
touched up error handling a little bit
This commit is contained in:
parent
9f27e27d25
commit
edba0207fb
@ -44,13 +44,13 @@ extend Socket
|
|||||||
{
|
{
|
||||||
## this primitive method may return failure.
|
## this primitive method may return failure.
|
||||||
## but ignore it here.
|
## but ignore it here.
|
||||||
if (self.insem)
|
if (self.insem notNil)
|
||||||
{
|
{
|
||||||
System unsignal: self.insem.
|
System unsignal: self.insem.
|
||||||
System removeAsyncSemaphore: self.insem.
|
System removeAsyncSemaphore: self.insem.
|
||||||
self.insem := nil.
|
self.insem := nil.
|
||||||
}.
|
}.
|
||||||
if (self.outsem)
|
if (self.outsem notNil)
|
||||||
{
|
{
|
||||||
System unsignal: self.outsem.
|
System unsignal: self.outsem.
|
||||||
System removeAsyncSemaphore: self.outsem.
|
System removeAsyncSemaphore: self.outsem.
|
||||||
@ -158,15 +158,18 @@ class MyObject(Object)
|
|||||||
if (n == 0)
|
if (n == 0)
|
||||||
{
|
{
|
||||||
sck close.
|
sck close.
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
(n asString & ' bytes read') dump.
|
||||||
|
data dump.
|
||||||
}.
|
}.
|
||||||
(n asString & ' bytes read') dump.
|
|
||||||
data dump.
|
|
||||||
].
|
].
|
||||||
|
|
||||||
outact := [:sck :state |
|
outact := [:sck :state |
|
||||||
if (state)
|
if (state)
|
||||||
{
|
{
|
||||||
sck writeBytes: #[ $h, $e, $l, $l, $o ].
|
sck writeBytes: #[ $h, $e, $l, $l, $o, 10 ].
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -178,7 +181,6 @@ class MyObject(Object)
|
|||||||
if (state)
|
if (state)
|
||||||
{
|
{
|
||||||
'CONNECTED NOW.............' dump.
|
'CONNECTED NOW.............' dump.
|
||||||
##s onOutputDo: outact.
|
|
||||||
s writeBytes: #[ $h $e $l $l $o ].
|
s writeBytes: #[ $h $e $l $l $o ].
|
||||||
|
|
||||||
s watchInput.
|
s watchInput.
|
||||||
|
@ -29,7 +29,7 @@ class MyObject(Object)
|
|||||||
'resource temporarily unavailable'
|
'resource temporarily unavailable'
|
||||||
'bad system handle'
|
'bad system handle'
|
||||||
|
|
||||||
'data too large'
|
'*** undefined error ***'
|
||||||
'message receiver error'
|
'message receiver error'
|
||||||
'message sending error'
|
'message sending error'
|
||||||
'wrong number of arguments'
|
'wrong number of arguments'
|
||||||
@ -37,8 +37,8 @@ class MyObject(Object)
|
|||||||
'byte-code full'
|
'byte-code full'
|
||||||
'dictionary full'
|
'dictionary full'
|
||||||
'processor full'
|
'processor full'
|
||||||
'semaphore heap full'
|
'too many semaphores'
|
||||||
'semaphore list full'
|
'*** undefined error ***'
|
||||||
'divide by zero'
|
'divide by zero'
|
||||||
'I/O error'
|
'I/O error'
|
||||||
'encoding conversion error'
|
'encoding conversion error'
|
||||||
|
@ -57,7 +57,7 @@ static moo_ooch_t errstr_23[] = {'r','a','n','g','e',' ','e','r','r','o','r','\0
|
|||||||
static moo_ooch_t errstr_24[] = {'b','y','t','e','-','c','o','d','e',' ','f','u','l','l','\0'};
|
static moo_ooch_t errstr_24[] = {'b','y','t','e','-','c','o','d','e',' ','f','u','l','l','\0'};
|
||||||
static moo_ooch_t errstr_25[] = {'d','i','c','t','i','o','n','a','r','y',' ','f','u','l','l','\0'};
|
static moo_ooch_t errstr_25[] = {'d','i','c','t','i','o','n','a','r','y',' ','f','u','l','l','\0'};
|
||||||
static moo_ooch_t errstr_26[] = {'p','r','o','c','e','s','s','o','r',' ','f','u','l','l','\0'};
|
static moo_ooch_t errstr_26[] = {'p','r','o','c','e','s','s','o','r',' ','f','u','l','l','\0'};
|
||||||
static moo_ooch_t errstr_27[] = {'s','e','m','a','p','h','o','r','e',' ','h','e','a','p',' ','f','u','l','l','\0'};
|
static moo_ooch_t errstr_27[] = {'t','o','o',' ','m','a','n','y',' ','s','e','m','a','p','h','o','r','e','s','\0'};
|
||||||
static moo_ooch_t errstr_28[] = {'s','e','m','a','p','h','o','r','e',' ','l','i','s','t',' ','f','u','l','l','\0'};
|
static moo_ooch_t errstr_28[] = {'s','e','m','a','p','h','o','r','e',' ','l','i','s','t',' ','f','u','l','l','\0'};
|
||||||
static moo_ooch_t errstr_29[] = {'d','i','v','i','d','e',' ','b','y',' ','z','e','r','o','\0'};
|
static moo_ooch_t errstr_29[] = {'d','i','v','i','d','e',' ','b','y',' ','z','e','r','o','\0'};
|
||||||
static moo_ooch_t errstr_30[] = {'I','/','O',' ','e','r','r','o','r','\0'};
|
static moo_ooch_t errstr_30[] = {'I','/','O',' ','e','r','r','o','r','\0'};
|
||||||
@ -313,7 +313,7 @@ void moo_seterrwithsyserr (moo_t* moo, int syserr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
* ASSERTION FAILURE HANDLER
|
* ASSERTION FAILURE HANDLERsemaphore heap full
|
||||||
* -------------------------------------------------------------------------- */
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
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)
|
||||||
|
@ -57,6 +57,7 @@ static MOO_INLINE const char* proc_state_to_string (int state)
|
|||||||
#define SEM_LIST_MAX (SEM_LIST_INC * 1000)
|
#define SEM_LIST_MAX (SEM_LIST_INC * 1000)
|
||||||
#define SEM_HEAP_MAX (SEM_HEAP_INC * 1000)
|
#define SEM_HEAP_MAX (SEM_HEAP_INC * 1000)
|
||||||
#define SEM_IO_TUPLE_MAX (SEM_IO_TUPLE_INC * 1000)
|
#define SEM_IO_TUPLE_MAX (SEM_IO_TUPLE_INC * 1000)
|
||||||
|
#define SEM_IO_MAP_ALIGN 1024 /* this must a power of 2 */
|
||||||
|
|
||||||
#define SEM_HEAP_PARENT(x) (((x) - 1) / 2)
|
#define SEM_HEAP_PARENT(x) (((x) - 1) / 2)
|
||||||
#define SEM_HEAP_LEFT(x) ((x) * 2 + 1)
|
#define SEM_HEAP_LEFT(x) ((x) * 2 + 1)
|
||||||
@ -740,7 +741,7 @@ static int async_signal_semaphore (moo_t* moo, moo_oop_semaphore_t sem)
|
|||||||
{
|
{
|
||||||
if (moo->sem_list_count >= SEM_LIST_MAX)
|
if (moo->sem_list_count >= SEM_LIST_MAX)
|
||||||
{
|
{
|
||||||
moo_seterrnum (moo, MOO_ESLFULL);
|
moo_seterrnum (moo, MOO_ESEMFLOOD, "too many semaphores in the semaphore list");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1029,7 +1030,7 @@ static int add_to_sem_heap (moo_t* moo, moo_oop_semaphore_t sem)
|
|||||||
|
|
||||||
if (moo->sem_heap_count >= SEM_HEAP_MAX)
|
if (moo->sem_heap_count >= SEM_HEAP_MAX)
|
||||||
{
|
{
|
||||||
moo_seterrnum (moo, MOO_ESHFULL);
|
moo_seterrbfmt(moo, MOO_ESEMFLOOD, "too many semaphores in the semaphore heap");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1126,13 +1127,13 @@ static int add_to_sem_io (moo_t* moo, moo_oop_semaphore_t sem, moo_ooi_t io_hand
|
|||||||
|
|
||||||
/* TODO: specify the maximum io_handle supported and check it here instead of just relying on memory allocation success/failure? */
|
/* TODO: specify the maximum io_handle supported and check it here instead of just relying on memory allocation success/failure? */
|
||||||
|
|
||||||
new_capa = MOO_ALIGN_POW2 (io_handle + 1, 1024);
|
new_capa = MOO_ALIGN_POW2(io_handle + 1, SEM_IO_MAP_ALIGN);
|
||||||
|
|
||||||
tmp = moo_reallocmem (moo, moo->sem_io_map, MOO_SIZEOF(*tmp) * new_capa);
|
tmp = moo_reallocmem (moo, moo->sem_io_map, MOO_SIZEOF(*tmp) * new_capa);
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
{
|
{
|
||||||
moo_copyoocstr (moo->errmsg.buf2, MOO_COUNTOF(moo->errmsg.buf2), moo->errmsg.buf);
|
moo_copyoocstr (moo->errmsg.buf2, MOO_COUNTOF(moo->errmsg.buf2), moo->errmsg.buf);
|
||||||
moo_seterrbfmt (moo, MOO_EINVAL, "handle %zd out of supported range - %js", moo->errmsg.buf2);
|
moo_seterrbfmt (moo, moo->errnum, "handle %zd out of supported range - %js", moo->errmsg.buf2);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1148,7 +1149,7 @@ static int add_to_sem_io (moo_t* moo, moo_oop_semaphore_t sem, moo_ooi_t io_hand
|
|||||||
/* this handle is not in any tuples. add it to a new tuple */
|
/* this handle is not in any tuples. add it to a new tuple */
|
||||||
if (moo->sem_io_tuple_count >= SEM_IO_TUPLE_MAX)
|
if (moo->sem_io_tuple_count >= SEM_IO_TUPLE_MAX)
|
||||||
{
|
{
|
||||||
moo_seterrbfmt (moo, MOO_ESHFULL, "too many IO semaphore tuples"); /* TODO: change error code */
|
moo_seterrbfmt (moo, MOO_ESEMFLOOD, "too many IO semaphore tuples");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -725,7 +725,8 @@ static void log_write (moo_t* moo, moo_oow_t mask, const moo_ooch_t* msg, moo_oo
|
|||||||
xtn_t* xtn = moo_getxtn(moo);
|
xtn_t* xtn = moo_getxtn(moo);
|
||||||
int logfd;
|
int logfd;
|
||||||
|
|
||||||
if (!(xtn->logmask & mask)) return;
|
if (!(xtn->logmask & mask & ~MOO_LOG_ALL_LEVELS)) return; /* check log types */
|
||||||
|
if (!(xtn->logmask & mask & ~MOO_LOG_ALL_TYPES)) return; /* check log levels */
|
||||||
|
|
||||||
if (mask & MOO_LOG_STDOUT) logfd = 1;
|
if (mask & MOO_LOG_STDOUT) logfd = 1;
|
||||||
else if (mask & MOO_LOG_STDERR) logfd = 2;
|
else if (mask & MOO_LOG_STDERR) logfd = 2;
|
||||||
@ -2029,10 +2030,23 @@ static int handle_logopt (moo_t* moo, const moo_bch_t* str)
|
|||||||
else if (moo_compbcstr(flt, "ic") == 0) xtn->logmask |= MOO_LOG_IC;
|
else if (moo_compbcstr(flt, "ic") == 0) xtn->logmask |= MOO_LOG_IC;
|
||||||
else if (moo_compbcstr(flt, "primitive") == 0) xtn->logmask |= MOO_LOG_PRIMITIVE;
|
else if (moo_compbcstr(flt, "primitive") == 0) xtn->logmask |= MOO_LOG_PRIMITIVE;
|
||||||
|
|
||||||
|
else if (moo_compbcstr(flt, "fatal") == 0) xtn->logmask |= MOO_LOG_FATAL;
|
||||||
|
else if (moo_compbcstr(flt, "error") == 0) xtn->logmask |= MOO_LOG_ERROR;
|
||||||
|
else if (moo_compbcstr(flt, "warn") == 0) xtn->logmask |= MOO_LOG_WARN;
|
||||||
|
else if (moo_compbcstr(flt, "info") == 0) xtn->logmask |= MOO_LOG_INFO;
|
||||||
|
else if (moo_compbcstr(flt, "debug") == 0) xtn->logmask |= MOO_LOG_DEBUG;
|
||||||
|
|
||||||
|
else if (moo_compbcstr(flt, "fatal+") == 0) xtn->logmask |= MOO_LOG_FATAL;
|
||||||
|
else if (moo_compbcstr(flt, "error+") == 0) xtn->logmask |= MOO_LOG_FATAL | MOO_LOG_ERROR;
|
||||||
|
else if (moo_compbcstr(flt, "warn+") == 0) xtn->logmask |= MOO_LOG_FATAL | MOO_LOG_ERROR | MOO_LOG_WARN;
|
||||||
|
else if (moo_compbcstr(flt, "info+") == 0) xtn->logmask |= MOO_LOG_FATAL | MOO_LOG_ERROR | MOO_LOG_WARN | MOO_LOG_INFO;
|
||||||
|
else if (moo_compbcstr(flt, "debug+") == 0) xtn->logmask |= MOO_LOG_FATAL | MOO_LOG_ERROR | MOO_LOG_WARN | MOO_LOG_INFO | MOO_LOG_DEBUG;
|
||||||
}
|
}
|
||||||
while (cm);
|
while (cm);
|
||||||
|
|
||||||
xtn->logmask |= MOO_LOG_ALL_LEVELS; /* TODO: parse levels also */
|
|
||||||
|
if (!(xtn->logmask & MOO_LOG_ALL_TYPES)) xtn->logmask |= MOO_LOG_ALL_TYPES; /* no types specified. force to all types */
|
||||||
|
if (!(xtn->logmask & MOO_LOG_ALL_LEVELS)) xtn->logmask |= MOO_LOG_ALL_LEVELS; /* no levels specified. force to all levels */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -67,7 +67,7 @@ enum moo_errnum_t
|
|||||||
MOO_EAGAIN,
|
MOO_EAGAIN,
|
||||||
MOO_EBADHND,
|
MOO_EBADHND,
|
||||||
|
|
||||||
MOO_ENOAVAIL, /**< data not available*/
|
MOO_EXXXXX1, /**< **** not used ****/
|
||||||
MOO_EMSGRCV, /**< mesasge receiver error */
|
MOO_EMSGRCV, /**< mesasge receiver error */
|
||||||
MOO_EMSGSND, /**< message sending error. even doesNotUnderstand: is not found */
|
MOO_EMSGSND, /**< message sending error. even doesNotUnderstand: is not found */
|
||||||
MOO_ENUMARGS, /**< wrong number of arguments */
|
MOO_ENUMARGS, /**< wrong number of arguments */
|
||||||
@ -75,8 +75,8 @@ enum moo_errnum_t
|
|||||||
MOO_EBCFULL, /**< byte-code full */
|
MOO_EBCFULL, /**< byte-code full */
|
||||||
MOO_EDFULL, /**< dictionary full */
|
MOO_EDFULL, /**< dictionary full */
|
||||||
MOO_EPFULL, /**< processor full */
|
MOO_EPFULL, /**< processor full */
|
||||||
MOO_ESHFULL, /**< semaphore heap full */
|
MOO_ESEMFLOOD,/**< too many semaphores */
|
||||||
MOO_ESLFULL, /**< semaphore list full */
|
MOO_EXXXXX2, /**< **** not used ***** */
|
||||||
MOO_EDIVBY0, /**< divide by zero */
|
MOO_EDIVBY0, /**< divide by zero */
|
||||||
MOO_EIOERR, /**< I/O error */
|
MOO_EIOERR, /**< I/O error */
|
||||||
MOO_EECERR, /**< encoding conversion error */
|
MOO_EECERR, /**< encoding conversion error */
|
||||||
@ -425,7 +425,7 @@ typedef enum moo_gcfin_t moo_gcfin_t;
|
|||||||
/* [NOTE] this macro doesn't include the size of the trailer */
|
/* [NOTE] this macro doesn't include the size of the trailer */
|
||||||
#define MOO_OBJ_BYTESOF(oop) ((MOO_OBJ_GET_SIZE(oop) + MOO_OBJ_GET_FLAGS_EXTRA(oop)) * MOO_OBJ_GET_FLAGS_UNIT(oop))
|
#define MOO_OBJ_BYTESOF(oop) ((MOO_OBJ_GET_SIZE(oop) + MOO_OBJ_GET_FLAGS_EXTRA(oop)) * MOO_OBJ_GET_FLAGS_UNIT(oop))
|
||||||
|
|
||||||
#define MOO_OBJ_IS_OOP_POINTER(oop) (MOO_OOP_IS_POINTER(oop) && (MOO_OBJ_GET_FLAGS_TYPE(oop) == MOO_OBJ_TYPE_OOP))
|
#define MOO_OBJ_IS_OOP_POINTER(oop) (MOO_OOP_IS_POINTER(oop) && (MOO_OBJ_GET_FLAGS_TYPE(oop) == MOO_OBJ_TYPE_OOP))
|
||||||
#define MOO_OBJ_IS_CHAR_POINTER(oop) (MOO_OOP_IS_POINTER(oop) && (MOO_OBJ_GET_FLAGS_TYPE(oop) == MOO_OBJ_TYPE_CHAR))
|
#define MOO_OBJ_IS_CHAR_POINTER(oop) (MOO_OOP_IS_POINTER(oop) && (MOO_OBJ_GET_FLAGS_TYPE(oop) == MOO_OBJ_TYPE_CHAR))
|
||||||
#define MOO_OBJ_IS_BYTE_POINTER(oop) (MOO_OOP_IS_POINTER(oop) && (MOO_OBJ_GET_FLAGS_TYPE(oop) == MOO_OBJ_TYPE_BYTE))
|
#define MOO_OBJ_IS_BYTE_POINTER(oop) (MOO_OOP_IS_POINTER(oop) && (MOO_OBJ_GET_FLAGS_TYPE(oop) == MOO_OBJ_TYPE_BYTE))
|
||||||
#define MOO_OBJ_IS_HALFWORD_POINTER(oop) (MOO_OOP_IS_POINTER(oop) && (MOO_OBJ_GET_FLAGS_TYPE(oop) == MOO_OBJ_TYPE_HALFWORD))
|
#define MOO_OBJ_IS_HALFWORD_POINTER(oop) (MOO_OOP_IS_POINTER(oop) && (MOO_OBJ_GET_FLAGS_TYPE(oop) == MOO_OBJ_TYPE_HALFWORD))
|
||||||
@ -990,11 +990,6 @@ struct moo_vmprim_t
|
|||||||
|
|
||||||
typedef struct moo_vmprim_t moo_vmprim_t;
|
typedef struct moo_vmprim_t moo_vmprim_t;
|
||||||
|
|
||||||
/* =========================================================================
|
|
||||||
* IO MANIPULATION
|
|
||||||
* ========================================================================= */
|
|
||||||
|
|
||||||
/* TODO: MOVE moo_ioimpl_t HERE */
|
|
||||||
|
|
||||||
/* =========================================================================
|
/* =========================================================================
|
||||||
* CALLBACK MANIPULATION
|
* CALLBACK MANIPULATION
|
||||||
|
Loading…
Reference in New Issue
Block a user