You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Rebase against b479382737f9ee110bc61b1dd765c5b81d56c900.
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
From 2887a75d89ec2552abb472603f8db70a6e70c1f8 Mon Sep 17 00:00:00 2001
|
||||
From 5eddf968dfe301274c53a11f1f4d28e8b77fdb87 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Sat, 9 Jun 2018 15:39:37 -0500
|
||||
Subject: [PATCH 25/83] server: Create eventfd descriptors for device manager
|
||||
Subject: [PATCH] server: Create eventfd descriptors for device manager
|
||||
objects.
|
||||
|
||||
We don't have to worry about synchronization here because
|
||||
@ -15,7 +15,7 @@ Drives tab.
|
||||
1 file changed, 23 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/server/device.c b/server/device.c
|
||||
index 67505d99c..aaec23495 100644
|
||||
index a6bfa06eb..5f82daa73 100644
|
||||
--- a/server/device.c
|
||||
+++ b/server/device.c
|
||||
@@ -39,6 +39,7 @@
|
||||
@ -26,9 +26,9 @@ index 67505d99c..aaec23495 100644
|
||||
|
||||
/* IRP object */
|
||||
|
||||
@@ -91,10 +92,12 @@ struct device_manager
|
||||
struct list devices; /* list of devices */
|
||||
@@ -92,10 +93,12 @@ struct device_manager
|
||||
struct list requests; /* list of pending irps across all devices */
|
||||
struct irp_call *current_call; /* call currently executed on client side */
|
||||
struct wine_rb_tree kernel_objects; /* map of objects that have client side pointer associated */
|
||||
+ int esync_fd; /* esync file descriptor */
|
||||
};
|
||||
@ -39,7 +39,7 @@ index 67505d99c..aaec23495 100644
|
||||
static void device_manager_destroy( struct object *obj );
|
||||
|
||||
static const struct object_ops device_manager_ops =
|
||||
@@ -105,7 +108,7 @@ static const struct object_ops device_manager_ops =
|
||||
@@ -106,7 +109,7 @@ static const struct object_ops device_manager_ops =
|
||||
add_queue, /* add_queue */
|
||||
remove_queue, /* remove_queue */
|
||||
device_manager_signaled, /* signaled */
|
||||
@ -48,7 +48,7 @@ index 67505d99c..aaec23495 100644
|
||||
no_satisfied, /* satisfied */
|
||||
no_signal, /* signal */
|
||||
no_get_fd, /* get_fd */
|
||||
@@ -659,6 +662,9 @@ static void delete_file( struct device_file *file )
|
||||
@@ -694,6 +697,9 @@ static void delete_file( struct device_file *file )
|
||||
/* terminate all pending requests */
|
||||
LIST_FOR_EACH_ENTRY_SAFE( irp, next, &file->requests, struct irp_call, dev_entry )
|
||||
{
|
||||
@ -58,7 +58,7 @@ index 67505d99c..aaec23495 100644
|
||||
list_remove( &irp->mgr_entry );
|
||||
set_irp_result( irp, STATUS_FILE_DELETED, NULL, 0, 0 );
|
||||
}
|
||||
@@ -695,6 +701,13 @@ static int device_manager_signaled( struct object *obj, struct wait_queue_entry
|
||||
@@ -726,6 +732,13 @@ static int device_manager_signaled( struct object *obj, struct wait_queue_entry
|
||||
return !list_empty( &manager->requests );
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ index 67505d99c..aaec23495 100644
|
||||
static void device_manager_destroy( struct object *obj )
|
||||
{
|
||||
struct device_manager *manager = (struct device_manager *)obj;
|
||||
@@ -725,6 +738,9 @@ static void device_manager_destroy( struct object *obj )
|
||||
@@ -760,6 +773,9 @@ static void device_manager_destroy( struct object *obj )
|
||||
assert( !irp->file && !irp->async );
|
||||
release_object( irp );
|
||||
}
|
||||
@ -82,7 +82,7 @@ index 67505d99c..aaec23495 100644
|
||||
}
|
||||
|
||||
static struct device_manager *create_device_manager(void)
|
||||
@@ -736,6 +752,9 @@ static struct device_manager *create_device_manager(void)
|
||||
@@ -772,6 +788,9 @@ static struct device_manager *create_device_manager(void)
|
||||
list_init( &manager->devices );
|
||||
list_init( &manager->requests );
|
||||
wine_rb_init( &manager->kernel_objects, compare_kernel_object );
|
||||
@ -92,16 +92,16 @@ index 67505d99c..aaec23495 100644
|
||||
}
|
||||
return manager;
|
||||
}
|
||||
@@ -874,6 +893,9 @@ DECL_HANDLER(get_next_device_request)
|
||||
list_remove( &irp->mgr_entry );
|
||||
list_init( &irp->mgr_entry );
|
||||
if (!irp->file) release_object( irp ); /* no longer on manager queue */
|
||||
@@ -930,6 +949,9 @@ DECL_HANDLER(get_next_device_request)
|
||||
/* we already own the object if it's only on manager queue */
|
||||
if (irp->file) grab_object( irp );
|
||||
manager->current_call = irp;
|
||||
+
|
||||
+ if (do_esync() && list_empty( &manager->requests ))
|
||||
+ esync_clear( manager->esync_fd );
|
||||
+ if (do_esync() && list_empty( &manager->requests ))
|
||||
+ esync_clear( manager->esync_fd );
|
||||
}
|
||||
else close_handle( current->process, reply->next );
|
||||
}
|
||||
}
|
||||
else set_error( STATUS_PENDING );
|
||||
--
|
||||
2.20.1
|
||||
2.21.0
|
||||
|
||||
|
Reference in New Issue
Block a user