Fix bad memory access during shutdown
Bad idea to use a pointer into a realloced array..
This commit is contained in:
parent
8c9d306fc1
commit
50d0dcd467
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2007-2015 Kim Woelders
|
* Copyright (C) 2007-2021 Kim Woelders
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
* of this software and associated documentation files (the "Software"), to
|
* of this software and associated documentation files (the "Software"), to
|
||||||
|
@ -50,7 +50,7 @@ typedef struct {
|
||||||
|
|
||||||
static DbusData dbus_data;
|
static DbusData dbus_data;
|
||||||
|
|
||||||
static EventFdDesc *db_efd = NULL;
|
static int db_efd = 0;
|
||||||
|
|
||||||
static dbus_bool_t
|
static dbus_bool_t
|
||||||
DbusWatchAdd(DBusWatch * watch, void *data __UNUSED__)
|
DbusWatchAdd(DBusWatch * watch, void *data __UNUSED__)
|
||||||
|
|
28
src/events.c
28
src/events.c
|
@ -347,7 +347,7 @@ ExtVersion(int ext_ix)
|
||||||
* File descriptor handling
|
* File descriptor handling
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct _EventFdDesc {
|
typedef struct {
|
||||||
#if 0 /* Unused */
|
#if 0 /* Unused */
|
||||||
const char *name;
|
const char *name;
|
||||||
#endif
|
#endif
|
||||||
|
@ -355,7 +355,7 @@ struct _EventFdDesc {
|
||||||
int fd;
|
int fd;
|
||||||
#endif
|
#endif
|
||||||
void (*handler)(void);
|
void (*handler)(void);
|
||||||
};
|
} EventFdDesc;
|
||||||
|
|
||||||
static int nfds = 0;
|
static int nfds = 0;
|
||||||
#if USE_EVHAN_POLL
|
#if USE_EVHAN_POLL
|
||||||
|
@ -363,34 +363,34 @@ static struct pollfd *pfdl = NULL;
|
||||||
#endif
|
#endif
|
||||||
static EventFdDesc *pfds = NULL;
|
static EventFdDesc *pfds = NULL;
|
||||||
|
|
||||||
EventFdDesc *
|
int
|
||||||
EventFdRegister(int fd, EventFdHandler * handler)
|
EventFdRegister(int fd, EventFdHandler * handler)
|
||||||
{
|
{
|
||||||
nfds++;
|
int efd;
|
||||||
|
|
||||||
|
efd = nfds++;
|
||||||
pfds = EREALLOC(EventFdDesc, pfds, nfds);
|
pfds = EREALLOC(EventFdDesc, pfds, nfds);
|
||||||
|
|
||||||
#if USE_EVHAN_POLL
|
#if USE_EVHAN_POLL
|
||||||
pfdl = EREALLOC(struct pollfd, pfdl, nfds);
|
pfdl = EREALLOC(struct pollfd, pfdl, nfds);
|
||||||
pfdl[nfds - 1].fd = fd;
|
pfdl[efd].fd = fd;
|
||||||
#elif USE_EVHAN_SELECT
|
#elif USE_EVHAN_SELECT
|
||||||
pfds[nfds - 1].fd = fd;
|
pfds[efd].fd = fd;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pfds[nfds - 1].handler = handler;
|
pfds[efd].handler = handler;
|
||||||
|
|
||||||
return pfds + (nfds - 1);
|
return efd;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
EventFdUnregister(EventFdDesc * efd)
|
EventFdUnregister(int efd)
|
||||||
{
|
{
|
||||||
int ix = efd - pfds;
|
|
||||||
|
|
||||||
#if USE_EVHAN_POLL
|
#if USE_EVHAN_POLL
|
||||||
if (pfdl[ix].fd > 0)
|
if (pfdl[efd].fd > 0)
|
||||||
pfdl[ix].fd = -pfdl[ix].fd;
|
pfdl[efd].fd = -pfdl[efd].fd;
|
||||||
#elif USE_EVHAN_SELECT
|
#elif USE_EVHAN_SELECT
|
||||||
pfds[ix].fd = -1;
|
pfds[efd].fd = -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2006-2013 Kim Woelders
|
* Copyright (C) 2006-2021 Kim Woelders
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
* of this software and associated documentation files (the "Software"), to
|
* of this software and associated documentation files (the "Software"), to
|
||||||
|
@ -43,10 +43,9 @@ void EventsMain(void);
|
||||||
void EventShow(const XEvent * ev);
|
void EventShow(const XEvent * ev);
|
||||||
void EventShowError(const XEvent * ev);
|
void EventShowError(const XEvent * ev);
|
||||||
|
|
||||||
typedef struct _EventFdDesc EventFdDesc;
|
|
||||||
typedef void (EventFdHandler) (void);
|
typedef void (EventFdHandler) (void);
|
||||||
EventFdDesc *EventFdRegister(int fd, EventFdHandler * handler);
|
int EventFdRegister(int fd, EventFdHandler * handler);
|
||||||
void EventFdUnregister(EventFdDesc * efd);
|
void EventFdUnregister(int efd);
|
||||||
|
|
||||||
int EventsUpdateXY(int *px, int *py);
|
int EventsUpdateXY(int *px, int *py);
|
||||||
void EventsBlock(int mode);
|
void EventsBlock(int mode);
|
||||||
|
|
|
@ -56,7 +56,7 @@ static char restarting = 0;
|
||||||
static char *sm_client_id = NULL;
|
static char *sm_client_id = NULL;
|
||||||
static SmcConn sm_conn = NULL;
|
static SmcConn sm_conn = NULL;
|
||||||
|
|
||||||
static EventFdDesc *sm_efd = NULL;
|
static int sm_efd = 0;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_save_props(SmcConn smc_conn, int master_flag)
|
set_save_props(SmcConn smc_conn, int master_flag)
|
||||||
|
|
Loading…
Reference in New Issue