mirror of
https://github.com/kanjitalk755/macemu.git
synced 2025-01-07 12:32:21 +00:00
better logics in sigstack allocation on native platforms
This commit is contained in:
parent
88b493bf38
commit
f9e3fd28a1
@ -264,22 +264,22 @@ static void build_sigregs(sigregs *srp, machine_regs *mrp)
|
||||
static struct sigaltstack sig_stacks[SIG_STACK_COUNT]; // Stacks for signal handlers
|
||||
static int sig_stack_id = 0; // Stack slot currently used
|
||||
|
||||
static inline void sig_stack_acquire(void)
|
||||
static inline int sig_stack_acquire(void)
|
||||
{
|
||||
if (++sig_stack_id == SIG_STACK_COUNT) {
|
||||
if (sig_stack_id >= SIG_STACK_COUNT) {
|
||||
printf("FATAL: signal stack overflow\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
sigaltstack(&sig_stacks[sig_stack_id], NULL);
|
||||
return sigaltstack(&sig_stacks[sig_stack_id++], NULL);
|
||||
}
|
||||
|
||||
static inline void sig_stack_release(void)
|
||||
static inline int sig_stack_release(void)
|
||||
{
|
||||
if (--sig_stack_id < 0) {
|
||||
if (sig_stack_id <= 0) {
|
||||
printf("FATAL: signal stack underflow\n");
|
||||
return;
|
||||
return -1;
|
||||
}
|
||||
sigaltstack(&sig_stacks[sig_stack_id], NULL);
|
||||
return sigaltstack(&sig_stacks[--sig_stack_id], NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -576,8 +576,7 @@ int main(int argc, char **argv)
|
||||
sig_stacks[i].ss_flags = 0;
|
||||
sig_stacks[i].ss_size = SIG_STACK_SIZE;
|
||||
}
|
||||
sig_stack_id = 0;
|
||||
if (sigaltstack(&sig_stacks[0], NULL) < 0) {
|
||||
if (sig_stack_acquire() < 0) {
|
||||
sprintf(str, GetString(STR_SIGALTSTACK_ERR), strerror(errno));
|
||||
ErrorAlert(str);
|
||||
goto quit;
|
||||
|
Loading…
Reference in New Issue
Block a user