You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by hg...@apache.org on 2004/02/27 15:25:32 UTC
cvs commit: jakarta-tomcat-connectors/jk/native2/common jk_shm.c
hgomez 2004/02/27 06:25:32
Modified: jk/native2/common jk_shm.c
Log:
Revert to old code until APR shm problem is fixed...
Revision Changes Path
1.38 +85 -0 jakarta-tomcat-connectors/jk/native2/common/jk_shm.c
Index: jk_shm.c
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native2/common/jk_shm.c,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- jk_shm.c 24 Feb 2004 08:44:40 -0000 1.37
+++ jk_shm.c 27 Feb 2004 14:25:32 -0000 1.38
@@ -179,6 +179,91 @@
return JK_OK;
}
+#elif defined(HAVE_MMAP) && !defined(WIN32)
+
+static int JK_METHOD jk2_shm_destroy(jk_env_t *env, jk_shm_t *shm)
+{
+ caddr_t shmf=(caddr_t)shm->privateData;
+
+ munmap(shmf, shm->size);
+
+ return JK_OK;
+}
+
+static int jk2_shm_create(jk_env_t *env, jk_shm_t *shm)
+{
+ int rc;
+ struct stat filestat;
+
+ int fd = open(shm->fname, O_RDWR|O_CREAT, 0777);
+
+ if (fd == -1) {
+ env->l->jkLog(env, env->l, JK_LOG_ERROR,
+ "shm.create(): Can't open %s %d %s\n",
+ shm->fname, errno, strerror( errno ));
+ return JK_ERR;
+ }
+
+ rc=stat( shm->fname, &filestat);
+ if ( rc == -1) {
+ env->l->jkLog(env, env->l, JK_LOG_ERROR,
+ "shm.create(): Can't stat %s %d %s\n",
+ shm->fname, errno, strerror( errno ));
+ return JK_ERR;
+ }
+
+ if( shm->mbean->debug > 0 )
+ env->l->jkLog(env, env->l, JK_LOG_DEBUG,
+ "shm.create(): file open %s %d %d\n", shm->fname, shm->size, filestat.st_size );
+
+ if (filestat.st_size < shm->size ) {
+ char bytes[1024];
+ int toWrite=shm->size - filestat.st_size;
+
+ memset( bytes, 0, 1024 );
+ lseek(fd, 0, SEEK_END);
+
+ while( toWrite > 0 ) {
+ int written;
+ written=write(fd, bytes, 1024);
+ if( written == -1 ) {
+ env->l->jkLog(env, env->l, JK_LOG_ERROR,
+ "shm.create(): Can't write %s %d %s\n",
+ shm->fname, errno, strerror( errno ));
+ return JK_ERR;
+ }
+ toWrite-=written;
+ }
+
+ rc=stat( shm->fname, &filestat);
+ if ( rc == -1) {
+ env->l->jkLog(env, env->l, JK_LOG_ERROR,
+ "shm.create(): Can't stat2 %s %d %s\n",
+ shm->fname, errno, strerror( errno ));
+ return JK_ERR;
+ }
+ }
+
+ shm->privateData = mmap(NULL, filestat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+
+ if (shm->privateData == (caddr_t)-1 ||
+ shm->privateData == NULL ) {
+ env->l->jkLog(env, env->l, JK_LOG_ERROR,
+ "shm.create(): Can't mmap %s %d %s\n",
+ shm->fname, errno, strerror( errno ));
+
+ close(fd);
+ return JK_ERR;
+ }
+
+ shm->image = (void *)shm->privateData;
+ shm->head = (jk_shm_head_t *)shm->image;
+
+ close(fd);
+
+ return JK_OK;
+}
+
#else
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org