From 2b1314c1475e7e1831c691cf349cb89c66fa320c Mon Sep 17 00:00:00 2001 From: vnugent Date: Wed, 14 Feb 2024 14:10:27 -0500 Subject: Squashed commit of the following: commit ddd8a651b6eb43cfdd49d84056f8b9c34b543992 Author: vnugent Date: Wed Feb 14 00:15:50 2024 -0500 ci: reduce output noise and update Argon2 build commit cf942959ff2feea03d3eda2ff2a263bdac4d6bc6 Author: vnugent Date: Mon Feb 12 18:39:18 2024 -0500 chore: update packages and minor fixes commit ab506af9e2de2876b11bb45b3c7e787616c80155 Author: vnugent Date: Fri Feb 9 21:27:24 2024 -0500 fix: patch and update core runtime service injection commit 7ed5e8b19164c28d3a238bd56878d2161fbea2e4 Author: vnugent Date: Thu Feb 8 18:26:11 2024 -0500 fork dotnetplugins and make some intial updates/upgrades commit f4cab88d67be5da0953b14bd46fc972d4acc8606 Author: vnugent Date: Thu Feb 8 12:16:13 2024 -0500 update some heap api functions commit 6035bf7ed8412f1da361cc5feddd860abfaf4fc1 Author: vnugent Date: Wed Feb 7 22:09:11 2024 -0500 working file-watcher notifications/rework commit 698f8edf694ad9700ee2ce2220e692b496448ff9 Author: vnugent Date: Wed Feb 7 20:37:28 2024 -0500 remove mem-template and add file-watcher utility commit b17591e0fb363222fcd7d93c2bad4ab1b102385f Author: vnugent Date: Wed Feb 7 18:28:21 2024 -0500 add small memmove support for known small blocks commit 631be4d4b27fdbcd4b0526e17a128bb0d86911eb Author: vnugent Date: Wed Feb 7 18:08:02 2024 -0500 setup some readonly ref arguments and convert copy apis to readonly refs commit 2ba8dec68d5cb192e61ad0141d4b460076d3f90a Author: vnugent Date: Mon Feb 5 18:30:38 2024 -0500 restructure internal memmove strategies commit 25cf02872da980893ad7fb51d4eccc932380582b Author: vnugent Date: Sun Feb 4 01:29:18 2024 -0500 add http stream interface, profiling -> file read updates commit 757668c44e78864dc69d5713a2cfba6db2ed9a2a Author: vnugent Date: Fri Feb 2 14:27:04 2024 -0500 streamline data-copy api with proper large block support and net8 feature updates commit f22c1765fd72ab40a10d8ec92a8cb6d9ec1b1a04 Author: vnugent Date: Mon Jan 29 16:16:23 2024 -0500 check for compression lib updates to close #2 and fix some ci build stuff commit f974bfdef6a795b4a1c04602502ef506ef2587a9 Author: vnugent Date: Tue Jan 23 17:36:17 2024 -0500 switch allocator libs to lgpl2.1 commit 1fe5e01b329cd27b675000f1a557b784d3c88b56 Author: vnugent Date: Tue Jan 23 17:05:59 2024 -0500 consolidate allocator packages and close #1 commit 74e1107e522f00b670526193396217f40a6bade7 Author: vnugent Date: Tue Jan 23 15:43:40 2024 -0500 cache extension api tweaks commit 96ca2b0388a6326b9bb74f3ab2f62eaede6681e0 Author: vnugent Date: Mon Jan 22 17:54:23 2024 -0500 explicit tcp server args reuse --- lib/Utils/src/Native/SafeLibraryHandle.cs | 46 +++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 8 deletions(-) (limited to 'lib/Utils/src/Native') diff --git a/lib/Utils/src/Native/SafeLibraryHandle.cs b/lib/Utils/src/Native/SafeLibraryHandle.cs index 867523d..6b1af00 100644 --- a/lib/Utils/src/Native/SafeLibraryHandle.cs +++ b/lib/Utils/src/Native/SafeLibraryHandle.cs @@ -147,6 +147,7 @@ namespace VNLib.Utils.Native libary = null; return false; } + private static string? GetLibraryFile(string dirPath, string libPath, SearchOption search) { //slice the lib to its file name @@ -157,15 +158,16 @@ namespace VNLib.Utils.Native } /// - /// Loads a native method from the library of the specified name and managed delegate + /// Loads a native function pointer from the library of the specified name and + /// creates a new managed delegate /// /// The native method delegate type - /// The name of the native method + /// The name of the native function /// A wapper handle around the native method delegate /// /// If the handle is closed or invalid /// When the specified entrypoint could not be found - public SafeMethodHandle GetMethod(string methodName) where T : Delegate + public SafeMethodHandle GetFunction(string functionName) where T : Delegate { //Increment handle count before obtaining a method bool success = false; @@ -176,7 +178,7 @@ namespace VNLib.Utils.Native try { //Get the method pointer - IntPtr nativeMethod = NativeLibrary.GetExport(handle, methodName); + IntPtr nativeMethod = NativeLibrary.GetExport(handle, functionName); //Get the delegate for the function pointer T method = Marshal.GetDelegateForFunctionPointer(nativeMethod); return new(this, method); @@ -187,26 +189,54 @@ namespace VNLib.Utils.Native throw; } } + /// - /// Gets an delegate wrapper for the specified method without tracking its referrence. + /// Gets an delegate wrapper for the specified native function without tracking its referrence. /// The caller must manage the referrence count in order /// to not leak resources or cause process corruption /// /// The native method delegate type - /// The name of the native method + /// The name of the native library function /// A the delegate wrapper on the native method /// /// If the handle is closed or invalid /// When the specified entrypoint could not be found - public T DangerousGetMethod(string methodName) where T : Delegate + public T DangerousGetFunction(string functionName) where T : Delegate { this.ThrowIfClosed(); //Get the method pointer - IntPtr nativeMethod = NativeLibrary.GetExport(handle, methodName); + IntPtr nativeMethod = NativeLibrary.GetExport(handle, functionName); //Get the delegate for the function pointer return Marshal.GetDelegateForFunctionPointer(nativeMethod); } + /// + /// Loads a native method from the library of the specified name and managed delegate + /// + /// The native method delegate type + /// The name of the native method + /// A wapper handle around the native method delegate + /// + /// If the handle is closed or invalid + /// When the specified entrypoint could not be found + [Obsolete("Updated naming, use GetFunction() instead")] + public SafeMethodHandle GetMethod(string methodName) where T : Delegate => GetFunction(methodName); + + /// + /// Gets an delegate wrapper for the specified method without tracking its referrence. + /// The caller must manage the referrence count in order + /// to not leak resources or cause process corruption + /// + /// The native method delegate type + /// The name of the native method + /// A the delegate wrapper on the native method + /// + /// If the handle is closed or invalid + /// When the specified entrypoint could not be found + [Obsolete("Updated naming, use DangerousGetFunction() instead")] + public T DangerousGetMethod(string methodName) where T : Delegate => DangerousGetFunction(methodName); + + /// protected override bool ReleaseHandle() { -- cgit