ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/BDB/BDB.xs
(Generate patch)

Comparing BDB/BDB.xs (file contents):
Revision 1.18 by root, Sun Sep 16 18:15:34 2007 UTC vs.
Revision 1.21 by root, Thu Dec 6 02:44:48 2007 UTC

191} 191}
192 192
193static volatile unsigned int nreqs, nready, npending; 193static volatile unsigned int nreqs, nready, npending;
194static volatile unsigned int max_idle = 4; 194static volatile unsigned int max_idle = 4;
195static volatile unsigned int max_outstanding = 0xffffffff; 195static volatile unsigned int max_outstanding = 0xffffffff;
196static int respipe [2], respipe_osf [2]; 196static int respipe_osf [2], respipe [2] = { -1, -1 };
197 197
198static mutex_t reslock = X_MUTEX_INIT; 198static mutex_t reslock = X_MUTEX_INIT;
199static mutex_t reqlock = X_MUTEX_INIT; 199static mutex_t reqlock = X_MUTEX_INIT;
200static cond_t reqwait = X_COND_INIT; 200static cond_t reqwait = X_COND_INIT;
201 201
344 344
345 case REQ_SEQ_GET: 345 case REQ_SEQ_GET:
346 SvREADONLY_off (req->sv1); 346 SvREADONLY_off (req->sv1);
347 347
348 if (sizeof (IV) > 4) 348 if (sizeof (IV) > 4)
349 sv_setiv_mg (req->sv1, req->seq_t); 349 sv_setiv_mg (req->sv1, (IV)req->seq_t);
350 else 350 else
351 sv_setnv_mg (req->sv1, req->seq_t); 351 sv_setnv_mg (req->sv1, (NV)req->seq_t);
352 352
353 SvREFCNT_dec (req->sv1); 353 SvREFCNT_dec (req->sv1);
354 break; 354 break;
355 } 355 }
356 356
379#else 379#else
380# define TO_SOCKET(x) (x) 380# define TO_SOCKET(x) (x)
381#endif 381#endif
382 382
383static void 383static void
384create_pipe (int fd[2]) 384create_respipe ()
385{ 385{
386#ifdef _WIN32 386#ifdef _WIN32
387 int arg = 1; 387 int arg; /* argg */
388#endif
389 int old_readfd = respipe [0];
390
391 if (respipe [1] >= 0)
392 respipe_close (TO_SOCKET (respipe [1]));
393
394#ifdef _WIN32
388 if (PerlSock_socketpair (AF_UNIX, SOCK_STREAM, 0, fd) 395 if (PerlSock_socketpair (AF_UNIX, SOCK_STREAM, 0, respipe))
389 || ioctlsocket (TO_SOCKET (fd [0]), FIONBIO, &arg)
390 || ioctlsocket (TO_SOCKET (fd [1]), FIONBIO, &arg))
391#else 396#else
392 if (pipe (fd) 397 if (pipe (respipe))
393 || fcntl (fd [0], F_SETFL, O_NONBLOCK)
394 || fcntl (fd [1], F_SETFL, O_NONBLOCK))
395#endif 398#endif
396 croak ("unable to initialize result pipe"); 399 croak ("unable to initialize result pipe");
400
401 if (old_readfd >= 0)
402 {
403 if (dup2 (TO_SOCKET (respipe [0]), TO_SOCKET (old_readfd)) < 0)
404 croak ("unable to initialize result pipe(2)");
405
406 respipe_close (respipe [0]);
407 respipe [0] = old_readfd;
408 }
409
410#ifdef _WIN32
411 arg = 1;
412 if (ioctlsocket (TO_SOCKET (respipe [0]), FIONBIO, &arg)
413 || ioctlsocket (TO_SOCKET (respipe [1]), FIONBIO, &arg))
414#else
415 if (fcntl (respipe [0], F_SETFL, O_NONBLOCK)
416 || fcntl (respipe [1], F_SETFL, O_NONBLOCK))
417#endif
418 croak ("unable to initialize result pipe(3)");
397 419
398 respipe_osf [0] = TO_SOCKET (respipe [0]); 420 respipe_osf [0] = TO_SOCKET (respipe [0]);
399 respipe_osf [1] = TO_SOCKET (respipe [1]); 421 respipe_osf [1] = TO_SOCKET (respipe [1]);
400} 422}
401 423
867 idle = 0; 889 idle = 0;
868 nreqs = 0; 890 nreqs = 0;
869 nready = 0; 891 nready = 0;
870 npending = 0; 892 npending = 0;
871 893
872 respipe_close (respipe [0]);
873 respipe_close (respipe [1]);
874
875 create_pipe (respipe); 894 create_respipe ();
876 895
877 atfork_parent (); 896 atfork_parent ();
878} 897}
879 898
880#define dREQ(reqtype) \ 899#define dREQ(reqtype) \
944 const_iv (INIT_TXN) 963 const_iv (INIT_TXN)
945 const_iv (RECOVER) 964 const_iv (RECOVER)
946 const_iv (INIT_TXN) 965 const_iv (INIT_TXN)
947 const_iv (RECOVER_FATAL) 966 const_iv (RECOVER_FATAL)
948 const_iv (CREATE) 967 const_iv (CREATE)
968 const_iv (RDONLY)
949 const_iv (USE_ENVIRON) 969 const_iv (USE_ENVIRON)
950 const_iv (USE_ENVIRON_ROOT) 970 const_iv (USE_ENVIRON_ROOT)
951 const_iv (LOCKDOWN) 971 const_iv (LOCKDOWN)
952 const_iv (PRIVATE) 972 const_iv (PRIVATE)
953 const_iv (REGISTER) 973 const_iv (REGISTER)
966 const_iv (OVERWRITE) 986 const_iv (OVERWRITE)
967 const_iv (PANIC_ENVIRONMENT) 987 const_iv (PANIC_ENVIRONMENT)
968 const_iv (REGION_INIT) 988 const_iv (REGION_INIT)
969 const_iv (TIME_NOTGRANTED) 989 const_iv (TIME_NOTGRANTED)
970 const_iv (TXN_NOSYNC) 990 const_iv (TXN_NOSYNC)
991 const_iv (TXN_NOT_DURABLE)
971 const_iv (TXN_WRITE_NOSYNC) 992 const_iv (TXN_WRITE_NOSYNC)
972 const_iv (WRITECURSOR) 993 const_iv (WRITECURSOR)
973 const_iv (YIELDCPU) 994 const_iv (YIELDCPU)
974 const_iv (ENCRYPT_AES) 995 const_iv (ENCRYPT_AES)
975 const_iv (XA_CREATE) 996 const_iv (XA_CREATE)
983 const_iv (READ_UNCOMMITTED) 1004 const_iv (READ_UNCOMMITTED)
984 const_iv (TRUNCATE) 1005 const_iv (TRUNCATE)
985 const_iv (NOSYNC) 1006 const_iv (NOSYNC)
986 const_iv (CHKSUM) 1007 const_iv (CHKSUM)
987 const_iv (ENCRYPT) 1008 const_iv (ENCRYPT)
988 const_iv (TXN_NOT_DURABLE)
989 const_iv (DUP) 1009 const_iv (DUP)
990 const_iv (DUPSORT) 1010 const_iv (DUPSORT)
991 const_iv (RECNUM) 1011 const_iv (RECNUM)
992 const_iv (RENUMBER) 1012 const_iv (RENUMBER)
993 const_iv (REVSPLITOFF) 1013 const_iv (REVSPLITOFF)
1117 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 1137 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
1118 1138
1119 newCONSTSUB (stash, "DB_VERSION", newSVnv (DB_VERSION_MAJOR + DB_VERSION_MINOR * .1)); 1139 newCONSTSUB (stash, "DB_VERSION", newSVnv (DB_VERSION_MAJOR + DB_VERSION_MINOR * .1));
1120 newCONSTSUB (stash, "DB_VERSION_STRING", newSVpv (DB_VERSION_STRING, 0)); 1140 newCONSTSUB (stash, "DB_VERSION_STRING", newSVpv (DB_VERSION_STRING, 0));
1121 1141
1122 create_pipe (respipe); 1142 create_respipe ();
1123 1143
1124 X_THREAD_ATFORK (atfork_prepare, atfork_parent, atfork_child); 1144 X_THREAD_ATFORK (atfork_prepare, atfork_parent, atfork_child);
1125#ifdef _WIN32 1145#ifdef _WIN32
1126 X_MUTEX_CHECK (wrklock); 1146 X_MUTEX_CHECK (wrklock);
1127 X_MUTEX_CHECK (reslock); 1147 X_MUTEX_CHECK (reslock);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines