Below is the list of changes that have just been committed into a local
5.0 repository of osku. When osku does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.1995 05/09/22 10:48:44 osku@127.(none) +8 -0
Merge 127.(none):/home/osku/mysql/5.0/clean
into 127.(none):/home/osku/mysql/5.0/fkem
sql/sql_table.cc
1.274 05/09/22 10:42:48 osku@127.(none) +0 -0
Auto merged
sql/sql_parse.cc
1.494 05/09/22 10:42:48 osku@127.(none) +0 -0
Auto merged
sql/sql_class.h
1.266 05/09/22 10:42:47 osku@127.(none) +0 -0
Auto merged
sql/sql_class.cc
1.212 05/09/22 10:42:47 osku@127.(none) +0 -0
Auto merged
sql/handler.cc
1.189 05/09/22 10:42:47 osku@127.(none) +0 -0
Auto merged
sql/ha_innodb.cc
1.257 05/09/22 10:42:47 osku@127.(none) +0 -0
Auto merged
mysql-test/t/innodb.test
1.110 05/09/22 10:42:47 osku@127.(none) +0 -0
Auto merged
mysql-test/r/innodb.result
1.135 05/09/22 10:42:47 osku@127.(none) +0 -0
Auto merged
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: osku
# Host: 127.(none)
# Root: /home/osku/mysql/5.0/fkem/RESYNC
--- 1.188/sql/handler.cc 2005-09-14 10:45:56 +03:00
+++ 1.189/sql/handler.cc 2005-09-22 10:42:47 +03:00
@@ -27,31 +27,44 @@
#include "ha_myisammrg.h"
#ifdef HAVE_BERKELEY_DB
#include "ha_berkeley.h"
+extern handlerton berkeley_hton;
#endif
#ifdef HAVE_BLACKHOLE_DB
#include "ha_blackhole.h"
+extern handlerton blackhole_hton;
#endif
#ifdef HAVE_EXAMPLE_DB
#include "examples/ha_example.h"
+extern handlerton example_hton;
#endif
#ifdef HAVE_ARCHIVE_DB
#include "examples/ha_archive.h"
+extern handlerton archive_hton;
#endif
#ifdef HAVE_CSV_DB
#include "examples/ha_tina.h"
+extern handlerton tina_hton;
#endif
#ifdef HAVE_INNOBASE_DB
#include "ha_innodb.h"
+extern handlerton innobase_hton;
#endif
#ifdef HAVE_NDBCLUSTER_DB
#include "ha_ndbcluster.h"
+extern handlerton ndbcluster_hton;
#endif
#ifdef HAVE_FEDERATED_DB
#include "ha_federated.h"
+extern handlerton federated_hton;
#endif
#include <myisampack.h>
#include <errno.h>
+extern handlerton myisam_hton;
+extern handlerton myisammrg_hton;
+extern handlerton heap_hton;
+
+
/* static functions defined in this file */
static SHOW_COMP_OPTION have_yes= SHOW_OPTION_YES;
@@ -66,46 +79,52 @@
/* size of savepoint storage area (see ha_init) */
ulong savepoint_alloc_size;
+/*
+ This structure will go away in the future.
+*/
struct show_table_type_st sys_table_types[]=
{
{"MyISAM", &have_yes,
- "Default engine as of MySQL 3.23 with great performance", DB_TYPE_MYISAM},
+ "Default engine as of MySQL 3.23 with great performance", DB_TYPE_MYISAM,
+ NULL},
{"MEMORY", &have_yes,
- "Hash based, stored in memory, useful for temporary tables", DB_TYPE_HEAP},
- {"HEAP", &have_yes,
- "Alias for MEMORY", DB_TYPE_HEAP},
- {"MERGE", &have_yes,
- "Collection of identical MyISAM tables", DB_TYPE_MRG_MYISAM},
- {"MRG_MYISAM",&have_yes,
- "Alias for MERGE", DB_TYPE_MRG_MYISAM},
+ "Hash based, stored in memory, useful for temporary tables", DB_TYPE_HEAP,
+ NULL},
+ {"MRG_MYISAM", &have_yes,
+ "Collection of identical MyISAM tables", DB_TYPE_MRG_MYISAM, NULL},
{"ISAM", &have_isam,
- "Obsolete storage engine, now replaced by MyISAM", DB_TYPE_ISAM},
+ "Obsolete storage engine, now replaced by MyISAM", DB_TYPE_ISAM, NULL},
{"MRG_ISAM", &have_isam,
- "Obsolete storage engine, now replaced by MERGE", DB_TYPE_MRG_ISAM},
+ "Obsolete storage engine, now replaced by MERGE", DB_TYPE_MRG_ISAM, NULL},
{"InnoDB", &have_innodb,
- "Supports transactions, row-level locking, and foreign keys", DB_TYPE_INNODB},
- {"INNOBASE", &have_innodb,
- "Alias for INNODB", DB_TYPE_INNODB},
- {"BDB", &have_berkeley_db,
- "Supports transactions and page-level locking", DB_TYPE_BERKELEY_DB},
- {"BERKELEYDB",&have_berkeley_db,
- "Alias for BDB", DB_TYPE_BERKELEY_DB},
+ "Supports transactions, row-level locking, and foreign keys", DB_TYPE_INNODB,
+ NULL},
+ {"BERKELEYDB", &have_berkeley_db,
+ "Supports transactions and page-level locking", DB_TYPE_BERKELEY_DB, NULL},
{"NDBCLUSTER", &have_ndbcluster,
- "Clustered, fault-tolerant, memory-based tables", DB_TYPE_NDBCLUSTER},
- {"NDB", &have_ndbcluster,
- "Alias for NDBCLUSTER", DB_TYPE_NDBCLUSTER},
+ "Clustered, fault-tolerant, memory-based tables", DB_TYPE_NDBCLUSTER, NULL},
{"EXAMPLE",&have_example_db,
- "Example storage engine", DB_TYPE_EXAMPLE_DB},
+ "Example storage engine", DB_TYPE_EXAMPLE_DB, NULL},
{"ARCHIVE",&have_archive_db,
- "Archive storage engine", DB_TYPE_ARCHIVE_DB},
+ "Archive storage engine", DB_TYPE_ARCHIVE_DB, NULL},
{"CSV",&have_csv_db,
- "CSV storage engine", DB_TYPE_CSV_DB},
+ "CSV storage engine", DB_TYPE_CSV_DB, NULL},
{"FEDERATED",&have_federated_db,
- "Federated MySQL storage engine", DB_TYPE_FEDERATED_DB},
+ "Federated MySQL storage engine", DB_TYPE_FEDERATED_DB, NULL},
{"BLACKHOLE",&have_blackhole_db,
"/dev/null storage engine (anything you write to it disappears)",
- DB_TYPE_BLACKHOLE_DB},
- {NullS, NULL, NullS, DB_TYPE_UNKNOWN}
+ DB_TYPE_BLACKHOLE_DB, NULL},
+ {NullS, NULL, NullS, DB_TYPE_UNKNOWN, NULL}
+};
+
+struct show_table_alias_st sys_table_aliases[]=
+{
+ {"INNOBASE", "InnoDB", NULL },
+ {"NDB", "NDBCLUSTER", NULL},
+ {"BDB", "BERKELEYDB", NULL},
+ {"HEAP", "MEMORY", NULL},
+ {"MERGE", "MRG_MYISAM", NULL},
+ {NullS, NullS, NULL}
};
const char *ha_row_type[] = {
@@ -124,16 +143,27 @@
enum db_type ha_resolve_by_name(const char *name, uint namelen)
{
THD *thd= current_thd;
+ show_table_alias_st *table_alias;
+ show_table_type_st *types;
+
if (thd && !my_strcasecmp(&my_charset_latin1, name, "DEFAULT")) {
return (enum db_type) thd->variables.table_type;
}
- show_table_type_st *types;
for (types= sys_table_types; types->type; types++)
{
if (!my_strcasecmp(&my_charset_latin1, name, types->type))
return (enum db_type) types->db_type;
}
+
+ /*
+ We check for the historical aliases next.
+ */
+ for (table_alias= sys_table_aliases; table_alias->type; table_alias++)
+ {
+ if (!my_strcasecmp(&my_charset_latin1, name, table_alias->alias) &&
table_alias->st)
+ return (enum db_type) table_alias->st->db_type;
+ }
return DB_TYPE_UNKNOWN;
}
@@ -361,80 +391,167 @@
{
int error= 0;
handlerton **ht= handlertons;
+ show_table_type_st *types;
+ show_table_alias_st *table_alias;
total_ha= savepoint_alloc_size= 0;
if (ha_init_errors())
return 1;
- if (opt_bin_log)
+ for (types= sys_table_types; types->type; types++)
{
- if (!(*ht= binlog_init())) // Always succeed
- {
- mysql_bin_log.close(LOG_CLOSE_INDEX); // Never used
- opt_bin_log= 0; // Never used
- error= 1; // Never used
- }
- else
- ha_was_inited_ok(ht++);
- }
+ switch (types->db_type) {
+ case DB_TYPE_HEAP:
+ types->ht= &heap_hton;
+ for (table_alias= sys_table_aliases; table_alias->type; table_alias++)
+ {
+ if (!my_strcasecmp(&my_charset_latin1, types->ht->name,
+ table_alias->type))
+ table_alias->st= types;
+ }
+ break;
+ case DB_TYPE_MYISAM:
+ types->ht= &myisam_hton;
+ break;
+ case DB_TYPE_MRG_MYISAM:
+ types->ht= &myisammrg_hton;
+ for (table_alias= sys_table_aliases; table_alias->type; table_alias++)
+ {
+ if (!my_strcasecmp(&my_charset_latin1, types->ht->name,
+ table_alias->type))
+ table_alias->st= types;
+ }
+ break;
#ifdef HAVE_BERKELEY_DB
- if (have_berkeley_db == SHOW_OPTION_YES)
- {
- if (!(*ht= berkeley_init()))
- {
- have_berkeley_db= SHOW_OPTION_DISABLED; // If we couldn't use handler
- error= 1;
- }
- else
- ha_was_inited_ok(ht++);
- }
+ case DB_TYPE_BERKELEY_DB:
+ if (have_berkeley_db == SHOW_OPTION_YES)
+ {
+ if (!(*ht= berkeley_init()))
+ {
+ have_berkeley_db= SHOW_OPTION_DISABLED; // If we couldn't use handler
+ error= 1;
+ }
+ else
+ {
+ types->ht= &berkeley_hton;
+ for (table_alias= sys_table_aliases; table_alias->type; table_alias++)
+ {
+ if (!my_strcasecmp(&my_charset_latin1, types->ht->name,
table_alias->type))
+ table_alias->st= types;
+ }
+ ha_was_inited_ok(ht++);
+ }
+ }
+ break;
#endif
#ifdef HAVE_INNOBASE_DB
- if (have_innodb == SHOW_OPTION_YES)
- {
- if (!(*ht= innobase_init()))
- {
- have_innodb= SHOW_OPTION_DISABLED; // If we couldn't use handler
- error= 1;
- }
- else
- ha_was_inited_ok(ht++);
- }
+ case DB_TYPE_INNODB:
+ if (have_innodb == SHOW_OPTION_YES)
+ {
+ if (!(*ht= innobase_init()))
+ {
+ have_innodb= SHOW_OPTION_DISABLED; // If we couldn't use handler
+ error= 1;
+ }
+ else
+ {
+ ha_was_inited_ok(ht++);
+ types->ht= &innobase_hton;
+ for (table_alias= sys_table_aliases; table_alias->type; table_alias++)
+ {
+ if (!my_strcasecmp(&my_charset_latin1, types->ht->name,
table_alias->type))
+ table_alias->st= types;
+ }
+ }
+ }
+ break;
#endif
#ifdef HAVE_NDBCLUSTER_DB
- if (have_ndbcluster == SHOW_OPTION_YES)
- {
- if (!(*ht= ndbcluster_init()))
- {
- have_ndbcluster= SHOW_OPTION_DISABLED;
- error= 1;
- }
- else
- ha_was_inited_ok(ht++);
- }
+ case DB_TYPE_NDBCLUSTER:
+ if (have_ndbcluster == SHOW_OPTION_YES)
+ {
+ if (!(*ht= ndbcluster_init()))
+ {
+ have_ndbcluster= SHOW_OPTION_DISABLED;
+ error= 1;
+ }
+ else
+ {
+ ha_was_inited_ok(ht++);
+ types->ht= &ndbcluster_hton;
+ for (table_alias= sys_table_aliases; table_alias->type; table_alias++)
+ {
+ if (!my_strcasecmp(&my_charset_latin1, types->ht->name,
table_alias->type))
+ table_alias->st= types;
+ }
+ }
+ }
+ break;
+#endif
+#ifdef HAVE_EXAMPLE_DB
+ case DB_TYPE_EXAMPLE_DB:
+ types->ht= &example_hton;
+ break;
+#endif
+#ifdef HAVE_ARCHIVE_DB
+ case DB_TYPE_ARCHIVE_DB:
+ if (have_archive_db == SHOW_OPTION_YES)
+ {
+ if (!(*ht= archive_db_init()))
+ {
+ have_archive_db= SHOW_OPTION_DISABLED;
+ error= 1;
+ }
+ else
+ {
+ ha_was_inited_ok(ht++);
+ types->ht= &archive_hton;
+ }
+ }
+ break;
+#endif
+#ifdef HAVE_CSV_DB
+ case DB_TYPE_CSV_DB:
+ types->ht= &tina_hton;
+ break;
#endif
#ifdef HAVE_FEDERATED_DB
- if (have_federated_db == SHOW_OPTION_YES)
- {
- if (federated_db_init())
- {
- have_federated_db= SHOW_OPTION_DISABLED;
- error= 1;
+ case DB_TYPE_FEDERATED_DB:
+ if (have_federated_db == SHOW_OPTION_YES)
+ {
+ if (federated_db_init())
+ {
+ have_federated_db= SHOW_OPTION_DISABLED;
+ error= 1;
+ }
+ else
+ {
+ types->ht= &federated_hton;
+ }
+ }
+ break;
+#endif
+#ifdef HAVE_BLACKHOLE_DB
+ case DB_TYPE_BLACKHOLE_DB:
+ types->ht= &blackhole_hton;
+ break;
+#endif
+ default:
+ types->ht= NULL;
}
}
-#endif
-#ifdef HAVE_ARCHIVE_DB
- if (have_archive_db == SHOW_OPTION_YES)
+
+ if (opt_bin_log)
{
- if (!(*ht= archive_db_init()))
+ if (!(*ht= binlog_init())) // Always succeed
{
- have_archive_db= SHOW_OPTION_DISABLED;
- error= 1;
+ mysql_bin_log.close(LOG_CLOSE_INDEX); // Never used
+ opt_bin_log= 0; // Never used
+ error= 1; // Never used
}
else
ha_was_inited_ok(ht++);
}
-#endif
DBUG_ASSERT(total_ha < MAX_HA);
/*
Check if there is a transaction-capable storage engine besides the
--- 1.211/sql/sql_class.cc 2005-09-14 10:45:56 +03:00
+++ 1.212/sql/sql_class.cc 2005-09-22 10:42:47 +03:00
@@ -181,9 +181,10 @@
spcont(NULL)
{
stmt_arena= this;
- host= user= priv_user= db= ip= 0;
+ db= 0;
catalog= (char*)"std"; // the only catalog we have for now
- host_or_ip= "connecting host";
+ main_security_ctx.init();
+ security_ctx= &main_security_ctx;
locked=some_tables_deleted=no_errors=password= 0;
query_start_used= 0;
count_cuted_fields= CHECK_FIELD_IGNORE;
@@ -237,9 +238,6 @@
server_id = ::server_id;
slave_net = 0;
command=COM_CONNECT;
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
- db_access=NO_ACCESS;
-#endif
*scramble= '\0';
init();
@@ -427,12 +425,8 @@
ha_close_connection(this);
- DBUG_PRINT("info", ("freeing host"));
- if (host != my_localhost) // If not pointer to constant
- safeFree(host);
- if (user != delayed_user)
- safeFree(user);
- safeFree(ip);
+ DBUG_PRINT("info", ("freeing security context"));
+ main_security_ctx.destroy();
safeFree(db);
free_root(&warn_root,MYF(0));
#ifdef USING_TRANSACTIONS
@@ -1827,6 +1821,38 @@
{
bzero((char*) &status_var, sizeof(status_var));
}
+
+
+void Security_context::init()
+{
+ host= user= priv_user= ip= 0;
+ host_or_ip= "connecting host";
+#ifndef NO_EMBEDDED_ACCESS_CHECKS
+ db_access= NO_ACCESS;
+#endif
+}
+
+
+void Security_context::destroy()
+{
+ // If not pointer to constant
+ if (host != my_localhost)
+ safeFree(host);
+ if (user != delayed_user)
+ safeFree(user);
+ safeFree(ip);
+}
+
+
+void Security_context::skip_grants()
+{
+ /* privileges for the user are unknown everything is allowed */
+ host_or_ip= (char *)"";
+ master_access= ~NO_ACCESS;
+ priv_user= (char *)"";
+ *priv_host= '\0';
+}
+
/****************************************************************************
Handling of open and locked tables states.
--- 1.265/sql/sql_class.h 2005-09-14 10:45:56 +03:00
+++ 1.266/sql/sql_class.h 2005-09-22 10:42:47 +03:00
@@ -509,6 +509,7 @@
ulong multi_range_count;
ulong myisam_repair_threads;
ulong myisam_sort_buff_size;
+ ulong myisam_stats_method;
ulong net_buffer_length;
ulong net_interactive_timeout;
ulong net_read_timeout;
@@ -941,6 +942,34 @@
bool xid_cache_insert(XID_STATE *xid_state);
void xid_cache_delete(XID_STATE *xid_state);
+
+class Security_context {
+public:
+ /*
+ host - host of the client
+ user - user of the client, set to NULL until the user has been read from
+ the connection
+ priv_user - The user privilege we are using. May be "" for anonymous user.
+ ip - client IP
+ */
+ char *host, *user, *priv_user, *ip;
+ /* The host privilege we are using */
+ char priv_host[MAX_HOSTNAME];
+ /* points to host if host is available, otherwise points to ip */
+ const char *host_or_ip;
+ ulong master_access; /* Global privileges from mysql.user */
+ ulong db_access; /* Privileges for current db */
+
+ void init();
+ void destroy();
+ void skip_grants();
+ inline char *priv_host_name()
+ {
+ return (*priv_host ? priv_host : (char *)"%");
+ }
+};
+
+
/*
A registry for item tree transformations performed during
query optimization. We register only those changes which require
@@ -1113,13 +1142,8 @@
char *thread_stack;
/*
- host - host of the client
- user - user of the client, set to NULL until the user has been read from
- the connection
- priv_user - The user privilege we are using. May be '' for anonymous user.
db - currently selected database
catalog - currently selected catalog
- ip - client IP
WARNING: some members of THD (currently 'db', 'catalog' and 'query') are
set and alloced by the slave SQL thread (for the THD of that thread); that
thread is (and must remain, for now) the only responsible for freeing these
@@ -1128,8 +1152,10 @@
properly. For details see the 'err:' label of the pthread_handler_decl of
the slave SQL thread, in sql/slave.cc.
*/
- char *host,*user,*priv_user,*db,*catalog,*ip;
- char priv_host[MAX_HOSTNAME];
+ char *db, *catalog;
+ Security_context main_security_ctx;
+ Security_context *security_ctx;
+
/* remote (peer) port */
uint16 peer_port;
/*
@@ -1138,13 +1164,9 @@
a time-consuming piece that MySQL can get stuck in for a long time.
*/
const char *proc_info;
- /* points to host if host is available, otherwise points to ip */
- const char *host_or_ip;
ulong client_capabilities; /* What the client supports */
ulong max_client_packet_length;
- ulong master_access; /* Global privileges from mysql.user */
- ulong db_access; /* Privileges for current db */
HASH handler_tables_hash;
/*
--- 1.493/sql/sql_parse.cc 2005-09-21 18:42:28 +03:00
+++ 1.494/sql/sql_parse.cc 2005-09-22 10:42:48 +03:00
@@ -2315,7 +2315,9 @@
SELECT_LEX_UNIT *unit= &lex->unit;
/* Saved variable value */
DBUG_ENTER("mysql_execute_command");
+
thd->net.no_send_error= 0;
+ thd->detailed_error[0] = '\0';
/*
In many cases first table of main SELECT_LEX have special meaning =>
--- 1.273/sql/sql_table.cc 2005-09-14 10:45:58 +03:00
+++ 1.274/sql/sql_table.cc 2005-09-22 10:42:48 +03:00
@@ -1709,6 +1709,7 @@
List_iterator_fast<Item> it(*items);
Item *item;
Field *tmp_field;
+ bool not_used;
DBUG_ENTER("create_table_from_items");
tmp_table.alias= 0;
@@ -1767,8 +1768,15 @@
DBUG_RETURN(0);
}
+ /*
+ FIXME: What happens if trigger manages to be created while we are
+ obtaining this lock ? May be it is sensible just to disable
+ trigger execution in this case ? Or will MYSQL_LOCK_IGNORE_FLUSH
+ save us from that ?
+ */
table->reginfo.lock_type=TL_WRITE;
- if (! ((*lock)= mysql_lock_tables(thd, &table, 1, MYSQL_LOCK_IGNORE_FLUSH)))
+ if (! ((*lock)= mysql_lock_tables(thd, &table, 1,
+ MYSQL_LOCK_IGNORE_FLUSH, ¬_used)))
{
VOID(pthread_mutex_lock(&LOCK_open));
hash_delete(&open_cache,(byte*) table);
--- 1.134/mysql-test/r/innodb.result 2005-09-14 10:45:56 +03:00
+++ 1.135/mysql-test/r/innodb.result 2005-09-22 10:42:47 +03:00
@@ -1730,6 +1730,15 @@
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using filesort
drop table t1;
+create table t1 (a char(1), b char(1), key(a, b)) engine=innodb;
+insert into t1 values ('8', '6'), ('4', '7');
+select min(a) from t1;
+min(a)
+4
+select min(b) from t1 where a='8';
+min(b)
+6
+drop table t1;
create table t1 (x bigint unsigned not null primary key) engine=innodb;
insert into t1(x) values (0xfffffffffffffff0),(0xfffffffffffffff1);
select * from t1;
@@ -1776,7 +1785,7 @@
Innodb_rows_deleted 2070
show status like "Innodb_rows_inserted";
Variable_name Value
-Innodb_rows_inserted 31725
+Innodb_rows_inserted 31727
show status like "Innodb_rows_updated";
Variable_name Value
Innodb_rows_updated 29530
--- 1.109/mysql-test/t/innodb.test 2005-09-14 10:45:56 +03:00
+++ 1.110/mysql-test/t/innodb.test 2005-09-22 10:42:47 +03:00
@@ -1259,6 +1259,15 @@
explain select * from t1 order by a,b,c,d;
drop table t1;
+#
+# BUG#11039,#13218 Wrong key length in min()
+#
+
+create table t1 (a char(1), b char(1), key(a, b)) engine=innodb;
+insert into t1 values ('8', '6'), ('4', '7');
+select min(a) from t1;
+select min(b) from t1 where a='8';
+drop table t1;
# End of 4.1 tests
#
--- 1.256/sql/ha_innodb.cc 2005-09-14 10:42:25 +03:00
+++ 1.257/sql/ha_innodb.cc 2005-09-22 10:42:47 +03:00
@@ -207,7 +207,7 @@
static int innobase_savepoint(THD* thd, void *savepoint);
static int innobase_release_savepoint(THD* thd, void *savepoint);
-static handlerton innobase_hton = {
+handlerton innobase_hton = {
"InnoDB",
0, /* slot */
sizeof(trx_named_savept_t), /* savepoint size. TODO: use it */
@@ -564,25 +564,29 @@
use the default max length */
{
const THD* thd;
+ const Security_context *sctx;
const char* s;
thd = (const THD*) input_thd;
+ /* We probably want to have original user as part of debug output. */
+ sctx = &thd->main_security_ctx;
+
fprintf(f, "MySQL thread id %lu, query id %lu",
thd->thread_id, (ulong) thd->query_id);
- if (thd->host) {
+ if (sctx->host) {
putc(' ', f);
- fputs(thd->host, f);
+ fputs(sctx->host, f);
}
- if (thd->ip) {
+ if (sctx->ip) {
putc(' ', f);
- fputs(thd->ip, f);
+ fputs(sctx->ip, f);
}
- if (thd->user) {
+ if (sctx->user) {
putc(' ', f);
- fputs(thd->user, f);
+ fputs(sctx->user, f);
}
if ((s = thd->proc_info)) {
| Thread |
|---|
| • bk commit into 5.0 tree (osku:1.1995) | Osku Salerma | 22 Sep |