亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? my_pthread.c

?? mysql的ODBC接口程序源代碼。用ODBC連接mysql數據庫
?? C
字號:
/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB   This file is public domain and comes with NO WARRANTY of any kind *//* Functions to get threads more portable */#include "mysys_priv.h"#ifdef THREAD#include <signal.h>#include <m_string.h>#include <thr_alarm.h>pthread_key(int,THR_KEY_my_errno);pthread_key(int,THR_KEY_cmp_length);pthread_key(int,THR_KEY_abort);pthread_mutex_t THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_keycache,		THR_LOCK_lock,THR_LOCK_isam;#ifndef HAVE_LOCALTIME_Rpthread_mutex_t LOCK_localtime_r;#endifmy_bool my_thread_global_init(void){  if (pthread_key_create(&THR_KEY_my_errno,free) ||      pthread_key_create(&THR_KEY_cmp_length,free) ||      pthread_key_create(&THR_KEY_abort,free))  {    fprintf(stderr,"Can't initialize threads: error %d\n",errno);    exit(1);  }  pthread_mutex_init(&THR_LOCK_malloc,NULL);  pthread_mutex_init(&THR_LOCK_open,NULL);  pthread_mutex_init(&THR_LOCK_keycache,NULL);  pthread_mutex_init(&THR_LOCK_lock,NULL);  pthread_mutex_init(&THR_LOCK_isam,NULL);#ifndef HAVE_LOCALTIME_R  pthread_mutex_init(&LOCK_localtime_r,NULL);#endif  return my_thread_init();}my_bool my_thread_init(void){#ifndef __WIN32__  char *tmp;  if (!my_pthread_getspecific(int*,THR_KEY_my_errno))  {						/* Safequard */    /* We must have 3 calloc() here because these are freed on       pthread_exit */    if (!(tmp=calloc(1,sizeof(int))) ||	pthread_setspecific(THR_KEY_my_errno,tmp) ||	!(tmp=calloc(1,sizeof(int))) ||	pthread_setspecific(THR_KEY_cmp_length,tmp) ||	!(tmp=calloc(1,sizeof(int))) ||	pthread_setspecific(THR_KEY_abort,tmp))      return 1;  }#else  THR_KEY_my_errno=THR_KEY_abort=0;#endif  return 0;}int *_my_errno(void){  return my_pthread_getspecific(int*,THR_KEY_my_errno);}#ifndef my_pthread_setpriovoid my_pthread_setprio(pthread_t thread_id,int prior){#ifdef HAVE_PTHREAD_SETSCHEDPARAM  struct sched_param sched_param;  bzero(&sched_param,sizeof(sched_param));  sched_param.sched_priority=prior;  VOID(pthread_setschedparam(thread_id,SCHED_OTHER,&sched_param));#endif}#endif#ifndef __WIN32__int my_pthread_getprio(pthread_t thread_id){#ifdef HAVE_PTHREAD_SETSCHEDPARAM  struct sched_param sched_param;  int policy;  if (!pthread_getschedparam(thread_id,&policy,&sched_param))  {    DBUG_PRINT("thread",("policy: %d  priority: %d",			 policy,sched_param.sched_priority));    return sched_param.sched_priority;  }#endif  return -1;}#endif#ifndef my_pthread_attr_setpriovoid my_pthread_attr_setprio(pthread_attr_t *attr, int priority){#ifdef HAVE_PTHREAD_SETSCHEDPARAM  struct sched_param sched_param;  bzero(&sched_param,sizeof(sched_param));  sched_param.sched_priority=priority;  VOID(pthread_attr_setschedparam(attr,&sched_param));#endif}#endif/* To allow use of pthread_getspecific with two arguments */#ifdef HAVE_NONPOSIX_PTHREAD_GETSPECIFIC#undef pthread_getspecificvoid *my_pthread_getspecific_imp(pthread_key_t key){  void *value;  if (pthread_getspecific(key,(void *) &value))    return 0;  return value;}#endif/* Some functions for RTS threads */#if defined(HAVE_rts_threads) || defined(AIX_3_2)int my_pthread_create_detached=1;int my_sigwait(sigset_t *set,int *sig){  int signal=sigwait(set);  if (signal < 0)    return errno;  *sig=signal;  return 0;}#endif/* localtime_r for SCO 3.2V4.2 */#ifndef HAVE_LOCALTIME_Rstruct tm *localtime_r(const time_t *clock, struct tm *res){  struct tm *tmp;  pthread_mutex_lock(&LOCK_localtime_r);  tmp=localtime(clock);  memcpy(res,tmp,sizeof(*tmp));  pthread_mutex_unlock(&LOCK_localtime_r);  return res;}#endif/****************************************************************************** Replacement of sigwait if the system doesn't have one (like BSDI 3.0)**** Note:** This version of sigwait() is assumed to called in a loop so the signalmask** is permanently modified to reflect the signal set. This is done to get** a much faster implementation.**** This implementation isn't thread safe: It assumes that only one** thread is using sigwait.**** If one later supplies a different signal mask, all old signals that** was used before are unblocked and set to SIGDFL.**** Author: Gary Wisniewski <garyw@spidereye.com.au>, much modified by Monty****************************************************************************/#if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(sigwait) && !defined(__WIN32__) && !defined(HAVE_rts_threads)#if !defined(DONT_USE_SIGSUSPEND)static sigset_t sigwait_set,rev_sigwait_set,px_recd;void px_handle_sig(int sig){  sigaddset(&px_recd, sig);}void sigwait_setup(sigset_t *set){  int i;  struct sigaction sact,sact1;  sigset_t unblock_mask;  sact.sa_flags = 0;  sact.sa_handler = px_handle_sig;  memcpy(&sact.sa_mask,set,sizeof(*set));	/* handler isn't thread_safe */  sigemptyset(&unblock_mask);  pthread_sigmask(SIG_UNBLOCK,(sigset_t*) 0,&rev_sigwait_set);  for (i = 1; i <= sizeof(sigwait_set)*8; i++)  {    if (sigismember(set,i))    {      sigdelset(&rev_sigwait_set,i);      if (!sigismember(&sigwait_set,i))	sigaction(i, &sact, (struct sigaction*) 0);    }    else    {      sigdelset(&px_recd,i);			/* Don't handle this */      if (sigismember(&sigwait_set,i))      {						/* Remove the old handler */	sigaddset(&unblock_mask,i);	sigdelset(&rev_sigwait_set,i);	sact1.sa_flags = 0;	sact1.sa_handler = SIG_DFL;	sigemptyset(&sact1.sa_mask);	sigaction(i, &sact1, 0);      }    }  }  memcpy(&sigwait_set,set,sizeof(*set));  pthread_sigmask(SIG_BLOCK,(sigset_t*) set,(sigset_t*) 0);  pthread_sigmask(SIG_UNBLOCK,&unblock_mask,(sigset_t*) 0);}int sigwait(sigset_t *setp, int *sigp){  if (memcmp(setp,&sigwait_set,sizeof(sigwait_set)))    sigwait_setup(setp);			/* Init or change of set */  for (;;)  {    /*      This is a fast, not 100% portable implementation to find the signal.      Because the handler is blocked there should be at most 1 bit set, but      the specification on this is somewhat shady so we use a set instead a      single variable.      */    ulong *ptr= (ulong*) &px_recd;    ulong *end=ptr+sizeof(px_recd)/sizeof(ulong);    for ( ; ptr != end ; ptr++)    {      if (*ptr)      {	ulong set= *ptr;	int found= (int) ((char*) ptr - (char*) &px_recd)*8+1;	while (!(set & 1))	{	  found++;	  set>>=1;	}	*sigp=found;	sigdelset(&px_recd,found);	return 0;      }    }    sigsuspend(&rev_sigwait_set);  }  return 0;}#else  /* !DONT_USE_SIGSUSPEND *//****************************************************************************** Replacement of sigwait if the system doesn't have one (like BSDI 3.0)**** Note:** This version of sigwait() is assumed to called in a loop so the signalmask** is permanently modified to reflect the signal set. This is done to get** a much faster implementation.**** This implementation uses a extra thread to handle the signals and one** must always call sigwait() with the same signal mask!**** BSDI 3.0 NOTE:**** pthread_kill() doesn't work on a thread in a select() or sleep() loop?** After adding the sleep to sigwait_thread, all signals are checked and** delivered every second. This isn't that terrible performance vice, but** someone should report this to BSDI and ask for a fix!** Another problem is that when the sleep() ends, every select() in other** threads are interrupted!****************************************************************************/static sigset_t pending_set;static bool inited=0;static pthread_cond_t  COND_sigwait;static pthread_mutex_t LOCK_sigwait;void sigwait_handle_sig(int sig){  pthread_mutex_lock(&LOCK_sigwait);  sigaddset(&pending_set, sig);  VOID(pthread_cond_signal(&COND_sigwait)); /* inform sigwait() about signal */  pthread_mutex_unlock(&LOCK_sigwait);}extern pthread_t alarm_thread;void *sigwait_thread(void *set_arg){  sigset_t *set=(sigset_t*) set_arg;  int i;  struct sigaction sact;  sact.sa_flags = 0;  sact.sa_handler = sigwait_handle_sig;  memcpy(&sact.sa_mask,set,sizeof(*set));	/* handler isn't thread_safe */  sigemptyset(&pending_set);  for (i = 1; i <= sizeof(pending_set)*8; i++)  {    if (sigismember(set,i))    {      sigaction(i, &sact, (struct sigaction*) 0);    }  }  sigaddset(set,THR_CLIENT_ALARM);  pthread_sigmask(SIG_UNBLOCK,(sigset_t*) set,(sigset_t*) 0);  alarm_thread=pthread_self();			/* For thr_alarm */  for (;;)  {						/* Wait for signals */#ifdef HAVE_NOT_BROKEN_SELECT    fd_set fd;    FD_ZERO(&fd);    select(0,&fd,0,0,0);#else    sleep(1);					/* Because of broken BSDI */#endif  }}int sigwait(sigset_t *setp, int *sigp){  if (!inited)  {    pthread_attr_t thr_attr;    pthread_t sigwait_thread_id;    inited=1;    sigemptyset(&pending_set);    pthread_mutex_init(&LOCK_sigwait,NULL);    pthread_cond_init(&COND_sigwait,NULL);    pthread_attr_init(&thr_attr);    pthread_attr_setscope(&thr_attr,PTHREAD_SCOPE_SYSTEM);    pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED);    pthread_attr_setstacksize(&thr_attr,8196);    my_pthread_attr_setprio(&thr_attr,100);	/* Very high priority */    VOID(pthread_create(&sigwait_thread_id,&thr_attr,sigwait_thread,setp));    VOID(pthread_attr_destroy(&thr_attr));  }  pthread_mutex_lock(&LOCK_sigwait);  for (;;)  {    ulong *ptr= (ulong*) &pending_set;    ulong *end=ptr+sizeof(pending_set)/sizeof(ulong);    for ( ; ptr != end ; ptr++)    {      if (*ptr)      {	ulong set= *ptr;	int found= (int) ((char*) ptr - (char*) &pending_set)*8+1;	while (!(set & 1))	{	  found++;	  set>>=1;	}	*sigp=found;	sigdelset(&pending_set,found);	pthread_mutex_unlock(&LOCK_sigwait);	return 0;      }    }    VOID(pthread_cond_wait(&COND_sigwait,&LOCK_sigwait));  }  return 0;}#endif /* DONT_USE_SIGSUSPEND */#endif /* HAVE_SIGWAIT *//******************************************************************************* Implement pthread_signal for systems that can't use signal() with threads** Currently this is only used with BSDI 3.0*****************************************************************************/#ifdef USE_PTHREAD_SIGNALint pthread_signal(int sig, void (*func)()){  struct sigaction sact;  sact.sa_flags= 0;  sact.sa_handler= func;  sigemptyset(&sact.sa_mask);  sigaction(sig, &sact, (struct sigaction*) 0);  return 0;}#endif/******************************************************************************* Patches for AIX*****************************************************************************/#ifdef AIX_3_2#undef pthread_mutex_init#undef pthread_cond_initint my_pthread_mutex_init(pthread_mutex_t *mp, const pthread_mutexattr_t *attr){  int error;  if (!attr)    error=pthread_mutex_init(mp,pthread_mutexattr_default);  else    error=pthread_mutex_init(mp,*attr);  return error;}int my_pthread_cond_init(pthread_cond_t *mp, const pthread_condattr_t *attr){  int error;  if (!attr)    error=pthread_cond_init(mp,pthread_condattr_default);  else    error=pthread_cond_init(mp,*attr);  return error;}int pthread_no_free(void *not_used){  return 0;}int pthread_dummy(int ret){  return ret;}#endif#endif /* THREAD */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲第一搞黄网站| 玉米视频成人免费看| 欧美日韩免费不卡视频一区二区三区| 成人av影院在线| 成人午夜在线播放| 成人教育av在线| 91麻豆蜜桃一区二区三区| 色老综合老女人久久久| 在线中文字幕一区| 正在播放亚洲一区| 欧美精品一区二区三区很污很色的| 欧美一级欧美三级| 久久久久久久精| 国产日韩欧美高清| 亚洲免费电影在线| 亚洲第一在线综合网站| 蜜桃在线一区二区三区| 国产一区二三区| 91女人视频在线观看| 欧美少妇一区二区| 欧美一二三四在线| 国产欧美一区二区精品仙草咪| 国产精品久久久久桃色tv| 亚洲另类在线视频| 日本中文字幕一区二区有限公司| 老司机午夜精品99久久| 成人免费毛片app| 欧美日韩国产大片| 久久久久亚洲蜜桃| 亚洲欧美国产高清| 九色porny丨国产精品| 成人黄色在线网站| 在线播放国产精品二区一二区四区| 日韩精品一区二区三区在线观看 | 精品视频免费看| 91精品婷婷国产综合久久竹菊| 精品国产免费视频| 亚洲色图视频网| 经典三级一区二区| 欧美在线不卡视频| 国产午夜亚洲精品羞羞网站| 亚洲精品免费看| 国产成人精品影视| 91精品国产一区二区三区| 欧美国产日韩精品免费观看| 日本成人在线视频网站| 99久久精品费精品国产一区二区| 日韩视频中午一区| 亚洲午夜一二三区视频| 成人污视频在线观看| 制服.丝袜.亚洲.另类.中文| 亚洲女与黑人做爰| 国产激情91久久精品导航| 欧美精品丝袜中出| 中文字幕视频一区二区三区久| 国内偷窥港台综合视频在线播放| 欧美午夜寂寞影院| 亚洲在线中文字幕| 成人美女视频在线看| 亚洲精品在线免费播放| 亚洲gay无套男同| 色综合天天视频在线观看| 精品不卡在线视频| 麻豆国产精品视频| 欧美日本一区二区| 亚洲大型综合色站| 日本高清不卡一区| 一区二区三区在线影院| 风间由美一区二区av101| 亚洲国产aⅴ成人精品无吗| 欧美成人一级视频| 精品国产a毛片| 毛片不卡一区二区| 欧美日韩在线亚洲一区蜜芽| 91在线丨porny丨国产| 国产精品久久精品日日| 成人国产在线观看| 欧美激情一区二区三区全黄| 成人午夜激情片| 国产拍揄自揄精品视频麻豆| 国产91丝袜在线播放九色| 久久久不卡影院| 福利电影一区二区三区| 国产精品乱码一区二区三区软件 | 亚洲国产成人一区二区三区| 韩国午夜理伦三级不卡影院| 欧美mv日韩mv| 国产一区二区免费在线| 久久精品夜夜夜夜久久| www.色综合.com| 一区二区视频免费在线观看| 欧美日韩一区成人| 视频精品一区二区| 精品乱人伦小说| gogo大胆日本视频一区| 1024国产精品| 欧美日韩美女一区二区| 麻豆精品一区二区综合av| 久久久精品国产免大香伊| aaa国产一区| 日韩中文字幕一区二区三区| 精品国免费一区二区三区| 成人午夜看片网址| 亚洲一区二区三区四区五区中文| 在线播放91灌醉迷j高跟美女| 精一区二区三区| 亚洲人成亚洲人成在线观看图片| 欧美疯狂性受xxxxx喷水图片| 极品美女销魂一区二区三区免费| 国产精品伦一区二区三级视频| 欧美色男人天堂| 国产精品一区在线| 亚洲综合免费观看高清完整版 | 久久久精品中文字幕麻豆发布| 成人性生交大片| 一区二区三区日韩欧美| 日韩精品一区二区三区老鸭窝| 不卡的av网站| 日本成人在线电影网| 国产精品美女久久久久高潮| 91精品国产手机| 91免费观看国产| 精品一区二区三区视频| 亚洲日本电影在线| 日韩精品自拍偷拍| 日本丰满少妇一区二区三区| 国产伦理精品不卡| 亚洲成人av一区二区三区| 亚洲综合色视频| 中文字幕成人在线观看| 91精品国产色综合久久久蜜香臀| 国产精品一二三| 久久国产生活片100| 亚洲欧美激情插| 欧美激情一区在线观看| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美日韩一本到| 色综合天天综合在线视频| 懂色av噜噜一区二区三区av| 久久99精品国产麻豆不卡| 日韩中文欧美在线| 亚洲一区在线观看免费| 1024精品合集| 亚洲三级久久久| 亚洲欧洲成人av每日更新| 中文字幕一区二区三区蜜月| 国产精品网曝门| 国产亚洲一区二区在线观看| 久久噜噜亚洲综合| 2023国产精华国产精品| 欧美大白屁股肥臀xxxxxx| 欧美丰满少妇xxxxx高潮对白| 欧美日韩一区视频| 欧美综合天天夜夜久久| 欧美日韩综合在线| 欧美精品1区2区| 91.麻豆视频| 欧美v国产在线一区二区三区| 欧美本精品男人aⅴ天堂| 久久综合国产精品| 欧美精品一区二区三区久久久| 26uuu亚洲| 欧美国产精品中文字幕| 国产精品美女久久福利网站 | 亚洲国产欧美在线| 一区二区三区电影在线播| 亚洲大片在线观看| 免费观看成人av| 国产一区二区女| 播五月开心婷婷综合| 色94色欧美sute亚洲线路二| 欧美丝袜丝交足nylons图片| 91麻豆精品91久久久久久清纯| 精品日产卡一卡二卡麻豆| 日本一区二区三区免费乱视频| 亚洲视频一区二区在线| 日韩国产欧美三级| 一本大道av一区二区在线播放 | 精品综合免费视频观看| 国产成人综合亚洲91猫咪| 成人黄页在线观看| 欧美视频一区二区三区在线观看| 日韩一区二区三区免费看| 国产欧美日韩三区| 亚洲成国产人片在线观看| 精品亚洲porn| gogo大胆日本视频一区| 制服丝袜在线91| 国产精品沙发午睡系列990531| 亚洲一区二区四区蜜桃| 国产精品原创巨作av| 欧美视频在线一区| 久久精品日产第一区二区三区高清版| 亚洲精品一二三区| 美国毛片一区二区三区| 在线观看一区不卡| 国产亚洲精品超碰| 午夜精品一区在线观看| 99精品国产99久久久久久白柏| 欧美不卡一区二区三区四区|