Differences From Artifact [d03343d8fd]:
- File
src/socket.m
— part of check-in
[b45a563f2b]
at
2020-12-06 17:49:25
on branch trunk
— Use a single global socket base on MorphOS
MorphOS allows sharing a single socket base between tasks, so having a
per-task socket base is unnecessary. (user: js, size: 21070) [annotate] [blame] [check-ins using] [more...]
To Artifact [7f38594dbe]:
- File
src/socket.m
— part of check-in
[5b37fbeb82]
at
2020-12-20 21:26:08
on branch trunk
— Return error instead of using errno for threading
errno is problematic for Amiga libraries and is also not thread-safe on
some systems, even though it should. (user: js, size: 21102) [annotate] [blame] [check-ins using] [more...]
︙ | ︙ | |||
75 76 77 78 79 80 81 | # endif # endif #endif #if defined(OF_HAVE_THREADS) && defined(OF_AMIGAOS) && !defined(OF_MORPHOS) OF_CONSTRUCTOR() { | | | | 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | # endif # endif #endif #if defined(OF_HAVE_THREADS) && defined(OF_AMIGAOS) && !defined(OF_MORPHOS) OF_CONSTRUCTOR() { if (of_tlskey_new(&of_socket_base_key) != 0) @throw [OFInitializationFailedException exception]; # ifdef OF_AMIGAOS4 if (of_tlskey_new(&of_socket_interface_key) != 0) @throw [OFInitializationFailedException exception]; # endif } #endif #if !defined(OF_AMIGAOS) || defined(OF_MORPHOS) || !defined(OF_HAVE_THREADS) static void |
︙ | ︙ | |||
121 122 123 124 125 126 127 | if (socInit(ctx, 0x100000) != 0) return; atexit((void (*)(void))socExit); # endif # if defined(OF_HAVE_THREADS) && (!defined(OF_AMIGAOS) || defined(OF_MORPHOS)) | | | | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | if (socInit(ctx, 0x100000) != 0) return; atexit((void (*)(void))socExit); # endif # if defined(OF_HAVE_THREADS) && (!defined(OF_AMIGAOS) || defined(OF_MORPHOS)) if (of_mutex_new(&mutex) != 0) return; # ifdef OF_WII if (of_spinlock_new(&spinlock) != 0) return; # endif # endif initSuccessful = true; } |
︙ | ︙ | |||
179 180 181 182 183 184 185 | if ((socketInterface = (struct SocketIFace *) GetInterface(socketBase, "main", 1, NULL)) == NULL) { CloseLibrary(socketBase); return false; } # endif | | | | 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | if ((socketInterface = (struct SocketIFace *) GetInterface(socketBase, "main", 1, NULL)) == NULL) { CloseLibrary(socketBase); return false; } # endif if (of_tlskey_set(of_socket_base_key, socketBase) != 0) { CloseLibrary(socketBase); # ifdef OF_AMIGAOS4 DropInterface((struct Interface *)socketInterface); # endif return false; } # ifdef OF_AMIGAOS4 if (of_tlskey_set(of_socket_interface_key, socketInterface) != 0) { CloseLibrary(socketBase); DropInterface((struct Interface *)socketInterface); return false; } # endif return true; |
︙ | ︙ | |||
325 326 327 328 329 330 331 | int of_getsockname(of_socket_t sock, struct sockaddr *restrict addr, socklen_t *restrict addrLen) { int ret; # if defined(OF_HAVE_THREADS) && (!defined(OF_AMIGAOS) || defined(OF_MORPHOS)) | | | | 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 | int of_getsockname(of_socket_t sock, struct sockaddr *restrict addr, socklen_t *restrict addrLen) { int ret; # if defined(OF_HAVE_THREADS) && (!defined(OF_AMIGAOS) || defined(OF_MORPHOS)) if (of_mutex_lock(&mutex) != 0) @throw [OFLockFailedException exception]; # endif ret = getsockname(sock, addr, addrLen); # if defined(OF_HAVE_THREADS) && (!defined(OF_AMIGAOS) || defined(OF_MORPHOS)) if (of_mutex_unlock(&mutex) != 0) @throw [OFUnlockFailedException exception]; # endif return ret; } #endif |
︙ | ︙ |