sched: allow enabling/disabling individual file handler events
This commit is contained in:
parent
6863e43269
commit
2c4c235147
3 changed files with 10 additions and 7 deletions
|
@ -235,7 +235,7 @@ read_write_socket(int sock_fd, int event, void *anything)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Disable output and wait for a response */
|
/* Disable output and wait for a response */
|
||||||
SCH_SetFileHandlerEvents(sock_fd, SCH_FILE_INPUT);
|
SCH_SetFileHandlerEvent(sock_fd, SCH_FILE_OUTPUT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event == SCH_FILE_INPUT) {
|
if (event == SCH_FILE_INPUT) {
|
||||||
|
@ -283,7 +283,7 @@ read_write_socket(int sock_fd, int event, void *anything)
|
||||||
/* Move the head and enable output for the next packet */
|
/* Move the head and enable output for the next packet */
|
||||||
queue_head = NEXT_QUEUE_INDEX(queue_head);
|
queue_head = NEXT_QUEUE_INDEX(queue_head);
|
||||||
if (!IS_QUEUE_EMPTY())
|
if (!IS_QUEUE_EMPTY())
|
||||||
SCH_SetFileHandlerEvents(sock_fd, SCH_FILE_INPUT | SCH_FILE_OUTPUT);
|
SCH_SetFileHandlerEvent(sock_fd, SCH_FILE_OUTPUT, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -369,7 +369,7 @@ NSD_SignAndSendPacket(uint32_t key_id, NTP_Packet *packet, NTP_Remote_Address *r
|
||||||
|
|
||||||
/* Enable output if there was no pending request */
|
/* Enable output if there was no pending request */
|
||||||
if (IS_QUEUE_EMPTY())
|
if (IS_QUEUE_EMPTY())
|
||||||
SCH_SetFileHandlerEvents(sock_fd, SCH_FILE_INPUT | SCH_FILE_OUTPUT);
|
SCH_SetFileHandlerEvent(sock_fd, SCH_FILE_OUTPUT, 1);
|
||||||
|
|
||||||
queue_tail = NEXT_QUEUE_INDEX(queue_tail);
|
queue_tail = NEXT_QUEUE_INDEX(queue_tail);
|
||||||
|
|
||||||
|
|
9
sched.c
9
sched.c
|
@ -219,13 +219,16 @@ SCH_RemoveFileHandler(int fd)
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
||||||
void
|
void
|
||||||
SCH_SetFileHandlerEvents(int fd, int events)
|
SCH_SetFileHandlerEvent(int fd, int event, int enable)
|
||||||
{
|
{
|
||||||
FileHandlerEntry *ptr;
|
FileHandlerEntry *ptr;
|
||||||
|
|
||||||
assert(events);
|
|
||||||
ptr = ARR_GetElement(file_handlers, fd);
|
ptr = ARR_GetElement(file_handlers, fd);
|
||||||
ptr->events = events;
|
|
||||||
|
if (enable)
|
||||||
|
ptr->events |= event;
|
||||||
|
else
|
||||||
|
ptr->events &= ~event;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ================================================== */
|
/* ================================================== */
|
||||||
|
|
2
sched.h
2
sched.h
|
@ -60,7 +60,7 @@ extern void SCH_Finalise(void);
|
||||||
/* Register a handler for when select goes true on a file descriptor */
|
/* Register a handler for when select goes true on a file descriptor */
|
||||||
extern void SCH_AddFileHandler(int fd, int events, SCH_FileHandler handler, SCH_ArbitraryArgument arg);
|
extern void SCH_AddFileHandler(int fd, int events, SCH_FileHandler handler, SCH_ArbitraryArgument arg);
|
||||||
extern void SCH_RemoveFileHandler(int fd);
|
extern void SCH_RemoveFileHandler(int fd);
|
||||||
extern void SCH_SetFileHandlerEvents(int fd, int events);
|
extern void SCH_SetFileHandlerEvent(int fd, int event, int enable);
|
||||||
|
|
||||||
/* Get the time stamp taken after a file descriptor became ready or a timeout expired */
|
/* Get the time stamp taken after a file descriptor became ready or a timeout expired */
|
||||||
extern void SCH_GetLastEventTime(struct timespec *cooked, double *err, struct timespec *raw);
|
extern void SCH_GetLastEventTime(struct timespec *cooked, double *err, struct timespec *raw);
|
||||||
|
|
Loading…
Reference in a new issue