summaryrefslogtreecommitdiff
path: root/Xext/sync.c
diff options
context:
space:
mode:
authorJamey Sharp <jamey@minilop.net>2012-03-14 17:22:18 -0700
committerPeter Hutterer <peter.hutterer@who-t.net>2012-03-22 13:12:55 +1000
commit1f12f059ef994e0b9b68fbd1f1556d0285c96b8b (patch)
tree65f54fe41452d03b3c17fb62971d9f1b3e154237 /Xext/sync.c
parent61cb98da1c6199964825de158d9eee7682d9c983 (diff)
sync: Use a linked list instead of an array for SysCounterList.
Signed-off-by: Jamey Sharp <jamey@minilop.net> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'Xext/sync.c')
-rw-r--r--Xext/sync.c53
1 files changed, 14 insertions, 39 deletions
diff --git a/Xext/sync.c b/Xext/sync.c
index f2bcd2512..fe0eac0e7 100644
--- a/Xext/sync.c
+++ b/Xext/sync.c
@@ -87,8 +87,7 @@ static RESTYPE RTAwait;
static RESTYPE RTAlarm;
static RESTYPE RTAlarmClient;
static RESTYPE RTFence;
-static int SyncNumSystemCounters = 0;
-static SyncCounter **SysCounterList = NULL;
+static struct xorg_list SysCounterList;
static int SyncNumInvalidCounterWarnings = 0;
#define MAX_INVALID_COUNTER_WARNINGS 5
@@ -932,12 +931,6 @@ SyncCreateSystemCounter(const char *name,
{
SyncCounter *pCounter;
- SysCounterList = realloc(SysCounterList,
- (SyncNumSystemCounters +
- 1) * sizeof(SyncCounter *));
- if (!SysCounterList)
- return NULL;
-
/* this function may be called before SYNC has been initialized, so we
* have to make sure RTCounter is created.
*/
@@ -959,6 +952,7 @@ SyncCreateSystemCounter(const char *name,
return pCounter;
}
pCounter->pSysCounterInfo = psci;
+ psci->pCounter = pCounter;
psci->name = name;
psci->resolution = resolution;
psci->counterType = counterType;
@@ -966,7 +960,7 @@ SyncCreateSystemCounter(const char *name,
psci->BracketValues = BracketValues;
XSyncMaxValue(&psci->bracket_greater);
XSyncMinValue(&psci->bracket_less);
- SysCounterList[SyncNumSystemCounters++] = pCounter;
+ xorg_list_add(&psci->entry, &SysCounterList);
}
return pCounter;
}
@@ -1111,26 +1105,8 @@ FreeCounter(void *env, XID id)
free(ptl); /* destroy the trigger list as we go */
}
if (IsSystemCounter(pCounter)) {
- int i, found = 0;
-
+ xorg_list_del(&pCounter->pSysCounterInfo->entry);
free(pCounter->pSysCounterInfo);
-
- /* find the counter in the list of system counters and remove it */
-
- if (SysCounterList) {
- for (i = 0; i < SyncNumSystemCounters; i++) {
- if (SysCounterList[i] == pCounter) {
- found = i;
- break;
- }
- }
- if (found < (SyncNumSystemCounters - 1)) {
- for (i = found; i < SyncNumSystemCounters - 1; i++) {
- SysCounterList[i] = SysCounterList[i + 1];
- }
- }
- }
- SyncNumSystemCounters--;
}
free(pCounter);
return Success;
@@ -1221,20 +1197,20 @@ static int
ProcSyncListSystemCounters(ClientPtr client)
{
xSyncListSystemCountersReply rep;
- int i, len;
+ SysCounterInfo *psci;
+ int len = 0;
xSyncSystemCounter *list = NULL, *walklist = NULL;
REQUEST_SIZE_MATCH(xSyncListSystemCountersReq);
rep.type = X_Reply;
rep.sequenceNumber = client->sequence;
- rep.nCounters = SyncNumSystemCounters;
-
- for (i = len = 0; i < SyncNumSystemCounters; i++) {
- const char *name = SysCounterList[i]->pSysCounterInfo->name;
+ rep.nCounters = 0;
+ xorg_list_for_each_entry(psci, &SysCounterList, entry) {
/* pad to 4 byte boundary */
- len += pad_to_int32(sz_xSyncSystemCounter + strlen(name));
+ len += pad_to_int32(sz_xSyncSystemCounter + strlen(psci->name));
+ ++rep.nCounters;
}
if (len) {
@@ -1251,12 +1227,11 @@ ProcSyncListSystemCounters(ClientPtr client)
swapl(&rep.nCounters);
}
- for (i = 0; i < SyncNumSystemCounters; i++) {
+ xorg_list_for_each_entry(psci, &SysCounterList, entry) {
int namelen;
char *pname_in_reply;
- SysCounterInfo *psci = SysCounterList[i]->pSysCounterInfo;
- walklist->counter = SysCounterList[i]->sync.id;
+ walklist->counter = psci->pCounter->sync.id;
walklist->resolution_hi = XSyncValueHigh32(psci->resolution);
walklist->resolution_lo = XSyncValueLow32(psci->resolution);
namelen = strlen(psci->name);
@@ -2441,8 +2416,6 @@ SAlarmNotifyEvent(xSyncAlarmNotifyEvent * from, xSyncAlarmNotifyEvent * to)
static void
SyncResetProc(ExtensionEntry * extEntry)
{
- free(SysCounterList);
- SysCounterList = NULL;
RTCounter = 0;
}
@@ -2455,6 +2428,8 @@ SyncExtensionInit(void)
ExtensionEntry *extEntry;
int s;
+ xorg_list_init(&SysCounterList);
+
for (s = 0; s < screenInfo.numScreens; s++)
miSyncSetup(screenInfo.screens[s]);