Author: mturk Date: Mon Oct 19 11:00:40 2009 New Revision: 826633 URL: http://svn.apache.org/viewvc?rev=826633&view=rev Log: Add aligned memory support
Added: commons/sandbox/runtime/trunk/src/main/native/os/unix/memalign.c (with props) commons/sandbox/runtime/trunk/src/main/native/os/win32/memalign.c (with props) Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.in commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in commons/sandbox/runtime/trunk/src/main/native/configure Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.in URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.in?rev=826633&r1=826632&r2=826633&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/Makefile.in (original) +++ commons/sandbox/runtime/trunk/src/main/native/Makefile.in Mon Oct 19 11:00:40 2009 @@ -128,6 +128,7 @@ $(SRCDIR)/os/unix/ios.$(OBJ) \ $(SRCDIR)/os/unix/group.$(OBJ) \ $(SRCDIR)/os/unix/user.$(OBJ) \ + $(SRCDIR)/os/unix/memalign.$(OBJ) \ $(SRCDIR)/os/unix/mmap.$(OBJ) \ $(SRCDIR)/os/unix/mutex.$(OBJ) \ $(SRCDIR)/os/unix/pipe.$(OBJ) \ @@ -165,6 +166,7 @@ $(SRCDIR)/os/unix/ios.$(OBJ) \ $(SRCDIR)/os/unix/group.$(OBJ) \ $(SRCDIR)/os/unix/user.$(OBJ) \ + $(SRCDIR)/os/unix/memalign.$(OBJ) \ $(SRCDIR)/os/unix/mmap.$(OBJ) \ $(SRCDIR)/os/unix/mutex.$(OBJ) \ $(SRCDIR)/os/unix/pipe.$(OBJ) \ @@ -199,6 +201,7 @@ $(SRCDIR)/os/unix/ios.$(OBJ) \ $(SRCDIR)/os/unix/group.$(OBJ) \ $(SRCDIR)/os/unix/user.$(OBJ) \ + $(SRCDIR)/os/unix/memalign.$(OBJ) \ $(SRCDIR)/os/unix/mmap.$(OBJ) \ $(SRCDIR)/os/unix/pipe.$(OBJ) \ $(SRCDIR)/os/unix/proc.$(OBJ) \ @@ -234,6 +237,7 @@ $(SRCDIR)/os/unix/ios.$(OBJ) \ $(SRCDIR)/os/unix/group.$(OBJ) \ $(SRCDIR)/os/unix/user.$(OBJ) \ + $(SRCDIR)/os/unix/memalign.$(OBJ) \ $(SRCDIR)/os/unix/mmap.$(OBJ) \ $(SRCDIR)/os/unix/mutex.$(OBJ) \ $(SRCDIR)/os/unix/pipe.$(OBJ) \ Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in?rev=826633&r1=826632&r2=826633&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in (original) +++ commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in Mon Oct 19 11:00:40 2009 @@ -122,6 +122,7 @@ $(SRCDIR)/os/win32/proc.$(OBJ) \ $(SRCDIR)/os/win32/os.$(OBJ) \ $(SRCDIR)/os/win32/ios.$(OBJ) \ + $(SRCDIR)/os/win32/memalign.$(OBJ) \ $(SRCDIR)/os/win32/mmap.$(OBJ) \ $(SRCDIR)/os/win32/module.$(OBJ) \ $(SRCDIR)/os/win32/mutex.$(OBJ) \ Modified: commons/sandbox/runtime/trunk/src/main/native/configure URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/configure?rev=826633&r1=826632&r2=826633&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/configure (original) +++ commons/sandbox/runtime/trunk/src/main/native/configure Mon Oct 19 11:00:40 2009 @@ -891,6 +891,7 @@ have_strerror_r=0 have_mmap64=0 have_fdatasync=0 + have_posix_memalign=0 else have_ktmw32=0 have_off64t=1 @@ -921,6 +922,7 @@ fi have_mmap64=`have_function mmap64` have_fdatasync=`have_function fdatasync` + have_posix_memalign=`have_function posix_memalign` fi if [ ".$host" = ".linux" ]; then @@ -1026,6 +1028,7 @@ #define HAVE_UCONTEXT_H `have_include ucontext` #define HAVE_STRERROR_R $have_strerror_r #define HAVE_MMAP64 $have_mmap64 +#define HAVE_POSIX_MEMALIGN $have_posix_memalign #define HAVE_FDATASYNC $have_fdatasync #define HAVE_ACCEPT4 `have_function accept4` #define HAVE_CLOCK_GETTIME `have_function clock_gettime` Added: commons/sandbox/runtime/trunk/src/main/native/os/unix/memalign.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/memalign.c?rev=826633&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/unix/memalign.c (added) +++ commons/sandbox/runtime/trunk/src/main/native/os/unix/memalign.c Mon Oct 19 11:00:40 2009 @@ -0,0 +1,70 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "acr.h" +#include "acr_private.h" +#include "acr_arch.h" +#include "acr_memory.h" +#include "acr_pointer.h" +#include "acr_error.h" + +extern acr_size_t acr_page_size; +/** + * Posix aligned memory functions + * + */ +static int aligned_pointer_cleanup(void *mem, size_t len) +{ + if (mem && len) { + free(mem); + return 0; + } + else { + return ACR_EISNULL; + } +} + +ACR_JNI_EXPORT_DECLARE(jobject, AlignedMemory, malloc0)(ACR_JNISTDARGS, + jlong siz) +{ + jobject ptr = NULL; + void *mem; + acr_size_t ass = (acr_size_t)ACR_ALIGN(siz, acr_page_size); + + UNREFERENCED_O; + if (ass < (acr_size_t)siz) { + /* Guard against faulty size value */ + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EINVAL, 0); + return NULL; + } +#if HAVE_POSIX_MEMALIGN + if (posix_memalign(&mem, acr_page_size, ass)) { + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ENOMEM, ACR_GET_OS_ERROR()); + return NULL; + } +#else + mem = memalign(acr_page_size, ass); + if (!mem) { + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ENOMEM, ACR_GET_OS_ERROR()); + return NULL; + } +#endif + ptr = ACR_NewBasicPointer(_E, mem, ass, aligned_pointer_cleanup); + if (!ptr) { + free(mem); + } + return ptr; +} Propchange: commons/sandbox/runtime/trunk/src/main/native/os/unix/memalign.c ------------------------------------------------------------------------------ svn:eol-style = native Added: commons/sandbox/runtime/trunk/src/main/native/os/win32/memalign.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/memalign.c?rev=826633&view=auto ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/os/win32/memalign.c (added) +++ commons/sandbox/runtime/trunk/src/main/native/os/win32/memalign.c Mon Oct 19 11:00:40 2009 @@ -0,0 +1,62 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "acr.h" +#include "acr_private.h" +#include "acr_arch.h" +#include "acr_memory.h" +#include "acr_pointer.h" +#include "acr_error.h" + +extern acr_size_t acr_page_size; +/** + * Windows executable memory functions + * + */ +static int aligned_pointer_cleanup(void *mem, size_t len) +{ + if (mem && len) { + VirtualFree(mem, 0, MEM_RELEASE); + return 0; + } + else { + return ACR_EISNULL; + } +} + +ACR_JNI_EXPORT_DECLARE(jobject, AlignedMemory, malloc0)(ACR_JNISTDARGS, + jlong siz) +{ + jobject ptr = NULL; + void *mem; + acr_size_t ass = (acr_size_t)ACR_ALIGN(siz, acr_page_size); + + UNREFERENCED_O; + mem = VirtualAlloc(NULL, ass, + MEM_COMMIT | MEM_RESERVE, + PAGE_READWRITE); + if (mem) { + /* Create the Pointer class with default cleanup. + */ + ptr = ACR_NewBasicPointer(_E, mem, ass, aligned_pointer_cleanup); + if (!ptr) { + VirtualFree(mem, 0, MEM_RELEASE); + } + } + else + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ENOMEM, ACR_GET_OS_ERROR()); + return ptr; +} Propchange: commons/sandbox/runtime/trunk/src/main/native/os/win32/memalign.c ------------------------------------------------------------------------------ svn:eol-style = native