12 messages in net.java.dev.jna.usersRe: [jna-users] Getting pointers from...
FromSent OnAttachments
Douglas AdlerAug 20, 2008 12:03 pm 
Timothy WallAug 20, 2008 12:55 pm 
Wayne MeissnerAug 20, 2008 6:37 pm 
Douglas AdlerAug 21, 2008 11:56 am 
Timothy WallAug 21, 2008 12:18 pm 
Wayne MeissnerAug 21, 2008 3:47 pm 
Wayne MeissnerAug 21, 2008 3:55 pm 
Timothy WallAug 22, 2008 7:41 am 
Wayne MeissnerAug 22, 2008 3:57 pm 
Timothy WallAug 22, 2008 4:04 pm 
Wayne MeissnerAug 22, 2008 4:39 pm 
Scott PalmerAug 22, 2008 6:47 pm 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [jna-users] Getting pointers from javaActions...
From:Wayne Meissner (wmei@gmail.com)
Date:Aug 22, 2008 3:57:38 pm
List:net.java.dev.jna.users

2008/8/23 Timothy Wall <twal@dev.java.net>:

all arrays as pinned, since Get*ArrayCritical locks the GC until the corresponding Release*ArrayCritical is called - v.bad for native methods that might block.

Other than the obvious aspect of the array itself being GC'd, why would a pinned primitive array interfere with GC?

From what I understand, pinning an array globally disables the GC until all arrays are unpinned. So, if you use GetPrimitiveArrayCritical, and pass the resulting pointer to a function that blocks, the GC won't run, and memory allocations on other threads might block.

Ergo, using GetPrimitiveArrayCritical by default would be bad, since we have no idea what the native code is going to do. It should only be used when the native function is guaranteed not to block - e.g. only doing memory copy, rendering from in-memory data, etc. Anything that might need to access an external resource like a file or a socket would be bad.