Commit Graph

1078 Commits

Author SHA1 Message Date
Andreas Kling
2dc7c5a7b0 Kernel: Add empty BlockDevice class. 2019-02-16 00:52:58 +01:00
Andreas Kling
994279d56c Kernel: Add Device base class for CharacterDevice.
..to prepare for adding a BlockDevice class.
2019-02-16 00:47:20 +01:00
Andreas Kling
c6ca6522fc Kernel: Sending a signal to another process needs to disable interrupts. 2019-02-15 23:45:01 +01:00
Andreas Kling
749db8237c Ext2FS: Fix various bugs in inode and block allocation.
I had the wrong idea about how group indices work, so using a larger fs
with more than one group caused all kinds of mess.
2019-02-15 23:28:20 +01:00
Andreas Kling
cbfd416279 LibC: The standard C library needs to be able to build as pure C.
Looks like we can't use those comfy C++ attributes in this code then.
2019-02-15 22:37:20 +01:00
Andreas Kling
3b42db0b4c LibC: Fix busted realloc() implementation. 2019-02-15 22:36:59 +01:00
Andreas Kling
df6aaaeeef Enable -Wimplicit-fallthrough. 2019-02-15 12:39:16 +01:00
Andreas Kling
56f0a30f9b LibC: Actually, malloc() can return null so don't lie about that. 2019-02-15 12:38:49 +01:00
Andreas Kling
022f7790db Use modern C++ attributes instead of __attribute__ voodoo.
This is quite nice, although I wish [[gnu::always_inline]] implied inline.
Also "gnu::" is kind of a wart, but whatcha gonna do.
2019-02-15 12:30:48 +01:00
Andreas Kling
fbcc8ab840 WindowServer: Slurp all available client messages when checking them.
We were reading one client message per client per event loop iteration.
That was not very snappy. Make the sockets non-blocking and read() until
there are no messages left.

It would be even better to make as few calls to read() as possible to
reduce context switching, but this is already a huge improvement.
2019-02-15 11:43:43 +01:00
Andreas Kling
29c49356e3 WindowServer: Rename GUI_Foo to WSAPI_Foo. 2019-02-15 09:17:18 +01:00
Andreas Kling
a54cd84c59 Move WindowServer API types header into WindowServer/. 2019-02-15 09:14:21 +01:00
Andreas Kling
0d23cd73e6 VFS: Add two assertions to resolve_path() to catch corrupted file systems. 2019-02-15 09:07:29 +01:00
Andreas Kling
18210c606d Kernel: Remove GUIEventDevice.
It's no longer used since all communication now happens across sockets. :^)
2019-02-15 08:59:55 +01:00
Andreas Kling
e9d6fbfb47 Kernel: Fix some broken debug log statements. 2019-02-14 17:43:47 +01:00
Andreas Kling
c7f5213d5b LibGUI: Add some extremely primitive retrying for the server connection. 2019-02-14 17:43:20 +01:00
Andreas Kling
ce74db4e2a Userland: /bin/ls should display socket files nicely. 2019-02-14 17:30:58 +01:00
Andreas Kling
bf58241c11 Port the WindowServer and LibGUI to communicate through local sockets.
This is really cool! :^)

Apps currently refuse to start if the WindowServer isn't listening on the
socket in /wsportal. This makes sense, but I guess it would also be nice
to have some sort of "wait for server on startup" mode.

This has performance issues, and I'll work on those, but this stuff seems
to actually work and I'm very happy with that.
2019-02-14 17:18:35 +01:00
Andreas Kling
00319c248c Kernel: Let's say that listening+bound sockets "can read."
This will make it easy-peasy to select() on a socket file descriptor to wait
for incoming connections together with other activities.
2019-02-14 16:03:37 +01:00
Andreas Kling
eb1c721ef3 Kernel: Actually send things between the socket endpoints. 2019-02-14 16:01:45 +01:00
Andreas Kling
b20a7aca61 Kernel: More work on sockets. Fleshing out connect(). 2019-02-14 15:55:19 +01:00
Andreas Kling
b12ab1270a Kernel: More work on sockets. Getting there.. 2019-02-14 15:40:04 +01:00
Andreas Kling
a63e8839da LibC: Add socket(), bind(), listen(), accept() and connect(). 2019-02-14 15:26:06 +01:00
Andreas Kling
54b1d6f57f Kernel: More sockets work. Fleshing out accept(). 2019-02-14 15:17:30 +01:00
Andreas Kling
1d66670ad7 LibC: Remove obsolete errno codes for windowing syscalls. 2019-02-14 14:41:54 +01:00
Andreas Kling
77177dbb76 Kernel: Begin fleshing out bind() syscall. 2019-02-14 14:38:30 +01:00
Andreas Kling
2f35e54f80 Kernel: Begin implementing UNIX domain sockets. 2019-02-14 14:17:38 +01:00
Andreas Kling
dc200923f2 WindowServer: Ignore attempts to make menu windows the active window. 2019-02-14 10:56:45 +01:00
Andreas Kling
7c53171b0a WindowServer: Add debug logging if we try to activate a client-less window. 2019-02-14 10:53:28 +01:00
Andreas Kling
2733a788eb WindowServer: Make MenuBar unaware of Process. 2019-02-14 10:49:59 +01:00
Andreas Kling
7723c06f27 WindowServer: Make WSMenu use WSClientConnection::post_message(). 2019-02-14 10:45:27 +01:00
Andreas Kling
8d5ba56cf9 Kernel: Remove ProcessGUI.cpp, merging remainders into Process.cpp. 2019-02-14 10:39:26 +01:00
Andreas Kling
c4703bedea WindowServer: Get rid of the WSWindow lock now that accesses are serial. 2019-02-14 10:35:56 +01:00
Andreas Kling
e5df2a5d5b WindowServer: Post error if trying to destroy non-existent menubar. 2019-02-14 10:31:39 +01:00
Andreas Kling
5d30c6b00c WindowServer: Add WSClientConnection::create_bitmap().
There we go. Now WSWindow doesn't know about Process at all.
2019-02-14 10:29:17 +01:00
Andreas Kling
9ab9734da0 WindowServer: Add WSClientConnection::post_message().
This way WSWindow doesn't have to grab at the Process.
2019-02-14 10:15:49 +01:00
Andreas Kling
427df5f312 LibGUI: Yield (using select()) in GEventLoop::wait_for_specific_event().
This is factored a bit stupidly. It would be nicer to just have the
read() in drain_events_from_server() be blocking, but the fd is opened
with O_NONBLOCK right now.

This makes everything run real snappy once again. :^)
2019-02-14 10:06:41 +01:00
Andreas Kling
222a6f7bbc WindowServer: Post error messages to clients on protocol failure. 2019-02-14 09:32:34 +01:00
Andreas Kling
f33f094483 FileManager: Add some menus. 2019-02-14 08:52:12 +01:00
Andreas Kling
28da956a12 WindowServer: Refactor WSClientConnection to have one function per request.
This is a lot nicer than the big switch full of code. This stuff has a bit
of a "please generate me instead" vibe to it, but I need to mess around with
it some more to figure out what the needs are.

This patch also unbreaks global cursor tracking, which was forgotten in the
big messaging refactoring.
2019-02-14 08:43:29 +01:00
Andreas Kling
aa7947c889 WindowServer: Add WSClientConnection class to manage an individual client.
This makes both object lifetimes and object ID's a lot easier to understand.
2019-02-14 08:22:47 +01:00
Andreas Kling
f529b845ec WindowServer: Convert entire API to be message-based.
One big step towards userspace WindowServer. :^)
2019-02-14 01:21:32 +01:00
Andreas Kling
ef4e9860fd WindowServer: Convert the remaining menu APIs into messages. 2019-02-13 21:47:14 +01:00
Andreas Kling
cf432b4c3d WindowServer: Refactor more of the menu APIs to be message-based.
This is all pretty verbose but I can whittle it down later. :^)
2019-02-13 18:49:23 +01:00
Andreas Kling
fbbf57b61c Rename GUI_Event to GUI_ServerMessage.
Now that communication is becoming bidirectional, "event" is no longer right.
2019-02-13 17:59:38 +01:00
Andreas Kling
4f98a35beb WindowServer: Begin refactoring towards a fully asynchronous protocol.
In order to move the WindowServer to userspace, I have to eliminate its
dependence on system call facilities. The communication channel with each
client needs to be message-based in both directions.
2019-02-13 17:54:30 +01:00
Andreas Kling
96352ab735 LibGUI: Pass the computed max_fd(+1) to select(). 2019-02-13 17:08:13 +01:00
Andreas Kling
1d758fd2ce WindowServer: Don't spawn new processes with WindowServer as parent.
I don't want to have to wait() on them from the WindowServer. Let's just set
new processes free and someone else will take care of them.
2019-02-13 09:53:21 +01:00
Andreas Kling
269f9ae524 WindowServer: Forgot to actually set 'had_any_timer' after we had any timer. 2019-02-13 09:38:32 +01:00
Andreas Kling
c5a00a56c8 WindowServer: Put a clock in the top right corner of the screen.
This way we don't even need the Clock app anymore. Very cool :^)
2019-02-13 09:27:08 +01:00