mirror of
git://source.winehq.org/git/wine.git
synced 2024-07-25 11:16:24 +00:00
dmime: Don't queue messages with immediate delivery type.
This commit is contained in:
parent
a6929a54ba
commit
be77443b7c
|
@ -97,19 +97,6 @@ static inline struct message *message_from_DMUS_PMSG(DMUS_PMSG *msg)
|
|||
return msg ? CONTAINING_RECORD(msg, struct message, msg) : NULL;
|
||||
}
|
||||
|
||||
static void performance_queue_message(struct performance *This, struct message *message, struct list *hint)
|
||||
{
|
||||
struct message *prev;
|
||||
|
||||
LIST_FOR_EACH_ENTRY_REV(prev, hint ? hint : &This->messages, struct message, entry)
|
||||
{
|
||||
if (&prev->entry == &This->messages) break;
|
||||
if (prev->msg.rtTime <= message->msg.rtTime) break;
|
||||
}
|
||||
|
||||
list_add_after(&prev->entry, &message->entry);
|
||||
}
|
||||
|
||||
static struct message *performance_get_message(struct performance *This, DWORD *timeout)
|
||||
{
|
||||
static const DWORD delivery_flags = DMUS_PMSGF_TOOL_IMMEDIATE | DMUS_PMSGF_TOOL_QUEUE | DMUS_PMSGF_TOOL_ATTIME;
|
||||
|
@ -129,8 +116,6 @@ static struct message *performance_get_message(struct performance *This, DWORD *
|
|||
{
|
||||
default:
|
||||
WARN("No delivery flag found for message %p\n", &message->msg);
|
||||
/* fallthrough */
|
||||
case DMUS_PMSGF_TOOL_IMMEDIATE:
|
||||
break;
|
||||
case DMUS_PMSGF_TOOL_QUEUE:
|
||||
offset = This->dwBumperLength * 10000;
|
||||
|
@ -186,6 +171,30 @@ static HRESULT performance_process_message(struct performance *This, DMUS_PMSG *
|
|||
return hr;
|
||||
}
|
||||
|
||||
static HRESULT performance_queue_message(struct performance *This, struct message *message, struct list *hint)
|
||||
{
|
||||
static const DWORD delivery_flags = DMUS_PMSGF_TOOL_IMMEDIATE | DMUS_PMSGF_TOOL_QUEUE | DMUS_PMSGF_TOOL_ATTIME;
|
||||
struct message *prev;
|
||||
HRESULT hr;
|
||||
|
||||
while ((message->msg.dwFlags & delivery_flags) == DMUS_PMSGF_TOOL_IMMEDIATE)
|
||||
{
|
||||
hr = performance_process_message(This, &message->msg);
|
||||
if (hr != DMUS_S_REQUEUE)
|
||||
return hr;
|
||||
}
|
||||
|
||||
LIST_FOR_EACH_ENTRY_REV(prev, hint ? hint : &This->messages, struct message, entry)
|
||||
{
|
||||
if (&prev->entry == &This->messages) break;
|
||||
if (prev->msg.rtTime <= message->msg.rtTime) break;
|
||||
}
|
||||
|
||||
list_add_after(&prev->entry, &message->entry);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static DWORD WINAPI message_thread_proc(void *args)
|
||||
{
|
||||
struct performance *This = args;
|
||||
|
@ -856,14 +865,7 @@ static HRESULT WINAPI performance_SendPMsg(IDirectMusicPerformance8 *iface, DMUS
|
|||
msg->dwFlags |= DMUS_PMSGF_REFTIME;
|
||||
}
|
||||
|
||||
if (msg->dwFlags & DMUS_PMSGF_TOOL_IMMEDIATE)
|
||||
{
|
||||
hr = performance_process_message(This, &message->msg);
|
||||
if (hr != DMUS_S_REQUEUE) goto done;
|
||||
}
|
||||
|
||||
performance_queue_message(This, message, NULL);
|
||||
hr = S_OK;
|
||||
hr = performance_queue_message(This, message, NULL);
|
||||
}
|
||||
|
||||
done:
|
||||
|
|
Loading…
Reference in a new issue